NSString drawAtPoint in Farbe funktioniert nicht? [solved]

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • NSString drawAtPoint in Farbe funktioniert nicht? [solved]

    Ich bin total ratlos. Ich will ein String zeichnen, Farbig und in Gross. Der Schriftzug wird aber immer nur in Schwarz und ca. 10pt dargestellt, egal was ich anstelle. Woran kann das liegen? Hab schon alles mögliche auskommentiert, was Seiteneffekte haben könnte.

    Code-Schnipsel:

    Quellcode

    1. - (void)drawRect:(NSRect)dirtyRect {
    2. NSGraphicsContext* theContext = [NSGraphicsContext currentContext];
    3. [self lockFocus];
    4. NSFont *tickFont = [NSFont labelFontOfSize:36.];
    5. if(!tickFont) {
    6. NSLog(@"NO SUCH FONT");
    7. }
    8. NSDictionary *attrs = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:NSFontAttributeName,
    9. NSForegroundColorAttributeName,
    10. nil]
    11. forKeys:[NSArray arrayWithObjects:tickFont,
    12. [NSColor redColor],
    13. nil]];
    14. NSString *theMsg = @"xPlease wait...";
    15. NSPoint outPt = NSMakePoint(0,0);
    16. [[NSColor redColor] set];
    17. [theMsg drawAtPoint:outPt withAttributes:attrs];
    18. [self unlockFocus];
    19. }
    Alles anzeigen

    Das Dictionary scheint auch zu passen:

    Quellcode

    1. {
    2. "NSCalibratedRGBColorSpace 1 0 0 1" = NSColor;
    3. "\"LucidaGrande 36.00 pt. P [] (0x10066e940) fobj=0x10069dab0, spc=11.39\"" = NSFont;
    4. }

    Ideen? Was mach ich bloss falsch?

    PS: An Position (0,0) ist OK, ist nur für den Test. Dort erscheint er auch. Nur halt SCHWARZ und KLEIN :(
    C++

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von zerm ()

  • gritsch schrieb:

    zerm schrieb:

    AAAAAaaaaaaargh!
    Ja, Danke :)


    genau aus diesem grund verwende ich lieber dictionaryWithObjectsAndKeys:
    das ist übersichtlicher und man kann auch einfacher pairs hinzufügen/entfernen ;)


    Aus dem gleichen Grund verwende ich prinzipiel eine genau andere Method.
    Wer diesen Fehler nicht gemacht hat, kann kein Cocoa.
    I would be embarrassed if they did not spy on me.
  • gritsch schrieb:

    longW schrieb:

    gritsch schrieb:

    zerm schrieb:

    AAAAAaaaaaaargh!
    Ja, Danke :)


    genau aus diesem grund verwende ich lieber dictionaryWithObjectsAndKeys:
    das ist übersichtlicher und man kann auch einfacher pairs hinzufügen/entfernen ;)


    Aus dem gleichen Grund verwende ich prinzipiel eine genau andere Method.
    Wer diesen Fehler nicht gemacht hat, kann kein Cocoa.


    welche verwendest du denn?


    Jetzt bin ich aber erwischt worden.

    Ich nehme ganz schnell ein NSMutableDictionary und addiere einzeln auf.
    Der andere Fehler, der passieren kann, ist die Reihenfolge, und das ist noch ärgerlicher.
    Beispiel:
    'zerm' will die Farbe ändern, klickert in der -geschachtelten- Methode herum,. erwischt den Schlüssel und setzt ihn dann falsch wieder ein.
    Und schon haben wir den Salat, und der Fehler ist dann wirklich kaum noch zu sehen.

    Natürlich würde 'zerm' das nie passieren, Dir wahrscheinlich auch nicht, aber meine Motorik ist gröber.
    I would be embarrassed if they did not spy on me.
  • naja, mit NSMutableDictionary geht das natürlich auch (ich hab mir dafür ein setObjectIfNotNil:forKey in eine category gepackt) aber dictionaryWithObjectsAndKeys ist auch recht nett:

    Quellcode

    1. [NSDictioanry dictionaryWithObjectsAndKeys:
    2. @"Value1",key1,
    3. @"Value2",key2,
    4. @"ValueN",keyN,
    5. nil|;
  • Markus Müller schrieb:

    Wird das Dein IKImageView-Ersatz? Falls ja, mach das mit CoreAnimation, ist schneller, einfacher umzusetzen und flexibler, als alles selbst zu zeichnen (CALayer, CATextLayer etc).

    Mhh, das wichtigste habe ich soweit. Der Text ist nur ein "Bitte warten" Platzhalter, wärend im anderen Thread die Berechnungen laufen. Und die eigentlichen Berechnungen sind C++ :P Ich schau mir das aber nochmal genauer an, bin ja auch grad erst dabei "Quartz" zu entdecken...

    gritsch schrieb:

    genau aus diesem grund verwende ich lieber dictionaryWithObjectsAndKeys:

    Genau aus diesem Grund finde ich Obj-C bescheuert. Ja, das ist ein Problem der Sprache, weil sie es ermöglicht und keine sinnvollen alternativen bietet. Jetzt gibt es zwar OO, aber das man ein Dictionary erstellen könnte, was als Schlüssel nur Werte vom Typ "NSStringAttributeType" oder so akzeptiert, dafür bräuchte man dann doch wieder das ach so böse C++ :D
    C++
  • btw: du verwendest c++ zum handlen der bilder - korrket?

    ich möchte auf dem iOS bilder skalieren und das ist mit bordmitteln ja grottenlangsam. habe es deshalb mal mit fremd-libs versucht bei denen das rasend schnell geht und auch super aussieht, nur basieren die alle auf libjpeg. leider gibts das nicht auf dem iPad (auf meinem jailbreakten schon).
    deshalb wollte ich fragen wie du das machst.
    im prinzip geht es bei mir nur darum bilder von der platte zu lesen und ein kleines preview zu erstellen.

    besten dank
  • Markus Müller schrieb:

    Kannst Du libjpeg nicht einfach als static lib einbauen?
    Falls es wirklich auf Geschwindigkeit ankommt, wäre OpenGL eine Möglichkeit.
    Hab nie damit gearbeitet, aber u.U. ist boosts GIL noch einen Versuch wert.


    das rutnerskalieren ist das langsame (macht man ja nur 1 mal), das kleine bildchen zeichnen dann nicht mehr.

    GIL benötigt auch libjpeg bzw libpng/libtif
  • unter iOs bekommst du doch eh immer nur ein Foto einzeln indem du den imagePicker benutzt. Wenn Du größere Mengen an Bildern hast dann muss Du die doch auch irgendwie in Deiner Sandbox gespeichert haben. Warum erweiterst du diese nicht z.B. per EXIF-Tag um ein Thumbnail oder meinetwegen speicherst Du ein Thumb.db parallel ?

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Thallius schrieb:

    unter iOs bekommst du doch eh immer nur ein Foto einzeln indem du den imagePicker benutzt. Wenn Du größere Mengen an Bildern hast dann muss Du die doch auch irgendwie in Deiner Sandbox gespeichert haben. Warum erweiterst du diese nicht z.B. per EXIF-Tag um ein Thumbnail oder meinetwegen speicherst Du ein Thumb.db parallel ?

    Gruß

    Claus


    naja, bei mir kommen die bilder von einem USB-Stick oder einer SD-Karte (CCK). das geht natürlich nur bei gejailbreaktem iOS also kann ich da auch libjpeg installieren. dachte nur vielleicht gehts auch anderst...
  • Naja kommt halt auf die Qualität an die Du erwarte. Schnelles gutes Skalieren wird normalerweise über Mip-Mapping gemacht und die MipMap entsprechend gewählt. Ich kann Dir gerne mal eine Routine schicken die ich früher benutzt habe auf einem embedded System. Eventuell bringt sie was. Muss sie nur raussuchen und die habe ich zu Hause und nicht hier am Platz.

    Du kannst aber natürlich auch erstmal das Bild "vorbehandeln" mit einem Pixelskip. Nur hast Du dadurch natürlich entsprechend inhaltliche Verluste.

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)