Punkte in ein IKImageView zeichnen

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

  • Punkte in ein IKImageView zeichnen

    Hallo Leute,

    also ich habe schon GOOGLE befragt aber finde zumindest nichts was ich auf anhieb verstehen würde. Mein Problem ist das folgende. Ich baue gerade eine APP für den Mac mittels derer ich gerne Messkurven aus Bildern auslesen möchte. Ich will also ein Bild in ein View laden es als Hintergrund benutzen und dann durch klicken/draggen punkte auf der Kurve festlegen.
    • Mein Erster Ansatz war eine sub-class zu NSImageView erstellen. Das hat an sich schnell funktioniert. Ich habe ein Image gesetzt und dann per drawRect punkte gesetzt als Reaktion auf MouseUp. Problem dabei war dann allerdings, dass ich gerne die Möglichkeit hätte zu zoomen. ?( Und da habe ich keine gute und effiziente Möglichkeit gefunden. Und wurde durch meine Suchen auf das folgende geführt:
    • IKImageView: auch hier habe ich eine subclass erstellt. Nun merkte ich aber, dass in meiner sublass von IKImageView drawRect nicht aufgerufen wurde. Bzw. es wird aufgerufen, wenn ich kein Image setze per

    Quellcode

    1. - (void)configureImage:(NSString*)imagePathStr
    2. {
    3. // use ImageIO to get the CGImage, image properties, and the image-UTType
    4. //
    5. CGImageRef image = NULL;
    6. CGImageSourceRef isr = CGImageSourceCreateWithURL((CFURLRef)[NSURL fileURLWithPath:imagePathStr], NULL);
    7. if (isr)
    8. {
    9. NSDictionary *options = [NSDictionary dictionaryWithObject: (id)kCFBooleanTrue forKey: (id) kCGImageSourceShouldCache];
    10. image = CGImageSourceCreateImageAtIndex(isr, 0, (CFDictionaryRef)options);
    11. if (image)
    12. {
    13. NSLog(@"Image was created!");
    14. _imageProperties = (NSDictionary*)CGImageSourceCopyPropertiesAtIndex(isr, 0, (CFDictionaryRef)_imageProperties);
    15. _imageUTType = (NSString*)CGImageSourceGetType(isr);
    16. [_imageUTType retain];
    17. }
    18. CFRelease(isr);
    19. }
    20. if (image)
    21. {
    22. [imageView ]
    23. [imageView setImage: image
    24. imageProperties: _imageProperties];
    25. CGImageRelease(image);
    26. }
    27. }
    Alles anzeigen

    • Das ist der code aus dem ImageView-Beispiel von Apple. Ich finde leider kein Beispiel/Erklärung wie man IKImageView oder CoreGraphics nutzt um ein Bild darzustellen und dann darauf zeichnen zu können.
    • Kann mir da jemand helfen? Ein gutes Tutorial zu diesem Thema nennen? Oder mir in einer kurzen Korrespondenz zur Seite stehen? :S

    Vielen lieben Dank schon mal!
    Es wird nichts so heiß gegessen wie es gekocht wird.
  • Ja aber gibt es da auch einen effektiven Ansatz, wie ich das ZOOMEN hinbekomme? Ohne Zoomfunktion habe ich es eigentlich bereits hinbekommen. In einem gewöhnlichen, NSImageView. Aber es ist bei kleinen Grafiken wirklich mühsam die Kurve abzuknicken! Also ist zoomen wirklich ein MUSS!
    Es wird nichts so heiß gegessen wie es gekocht wird.
  • IKImageView benutzt CALayer, mit drawRect: kommst du nicht weit. Und dich in den CALayer Tree reinhängen kann ich dir (aus eigener Erfahrung) von abraten. Nimm doch einfach einen NS(Image)View und pack ihn in einen NSScrollView. Wenn du das ganze etwas beschleunigen willst (weil du z.B. sehr grosse Bilder hast), dann nimmst du stattdessen CATiledLayer zusammen mit CIImage und implementierst das zoomen mit CALayer.
  • Werde heute mal versuchen mich da einzulesen....

    Wie zwinge ich den NS(Image)View, das Bild das er darstellt auf seine eigene Größe zu skalieren? Auch wenn das Bild eigentlich kleiner ist? Er soll es also vergrößern! Zur not komme ich auch ohne Zoom aus, wenn die Anwendung auf den ganzen Bildschirm läuft und das Bild mitskaliert...
    Es wird nichts so heiß gegessen wie es gekocht wird.