• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: drawRect: wrong scale in a programmatically created window
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: drawRect: wrong scale in a programmatically created window


  • Subject: Re: drawRect: wrong scale in a programmatically created window
  • From: Andreas Höschler <email@hidden>
  • Date: Fri, 15 Jan 2016 12:42:35 +0100

Hi Quincey,

thanks a lot for your response. Please read below ...

>> This should in a view with size {851, 899} get me a purple line starting close to the lower left corner and ending close to the top right corner. But that's not the case. The picture is drawn zoomed in!??
>
> I’m not sure I understand completely. The image is drawn “zoomed in”, or the purple rectangle is drawn “zoomed in”, or both?

>
> Note that the NSBitmapImageRep has dimensions in pixels, The rectangle’s coordinates are in points. You don’t show any code that’s drawing the image back to the screen (if that’s what you’re doing), but NSImage dimensions (the ‘size’ property) is also in points, not pixels, even when the bitmap image rep is in pixels.

It seems I have a lack of understanding of the difference of points and pixels. What you describe is/was exactly the problem. My code

      [mapView lockFocus];
      NSBitmapImageRep *rep = [[NSBitmapImageRep alloc] initWithFocusedViewRect:[mapView bounds]];
      NSData *data = [[[rep representationUsingType:NSPNGFileType properties:[NSDictionary dictionaryWithObject:[NSNumber numberWithInt:1] forKey:@"NSImageInterlaced"]] retain] autorelease];
      [mapView unlockFocus];

with mapView bounds

2016-01-15 12:27:05.173 ESMMapServer[49673:451971] bounds {{0, 0}, {851, 899}}

generates the following an image with Size={851, 899} and Pixels=1702x1798. When I put this into an imageView with

            NSImage *image = [[NSImage alloc] initWithData:imageData];
            NSLog(@"image %@", image, NSStringFromSize([image size]));
            NSLog(@"mapView %@ frame %@", mapView, NSStringFromRect([mapView frame]));
            NSLog(@"mapView %@ bounds %@", mapView, NSStringFromRect([mapView bounds]));
            [imageData writeToFile:@"/Users/ahoesch/B.png" atomically:YES]; // <--- remove this line
            [mapView setImageScaling:NSScaleNone];
            [mapView setImage:image];

I of course get the unwanted effect:

    "NSBitmapImageRep 0x7c024280 Size={851, 899} ColorSpace=(not yet loaded) BPS=8 BPP=(not yet loaded) Pixels=1702x1798 Alpha=YES Planar=NO Format=(not yet loaded) CurrentBacking=nil (faulting) CGImageSource=0x7c015c90"
)>
15/01/16 12:27:05,523 SOSmartBrowser[49595]: mapView <FBMapView: 0x81b661c0> frame {{10, 10}, {851, 899}}
15/01/16 12:27:05,523 SOSmartBrowser[49595]: mapView <FBMapView: 0x81b661c0> bounds {{0, 0}, {851, 899}}

This can of course easily be fixed by doing

            [mapView setImageScaling:NSScaleProportionally]; // NSScaleNone is no good idea since the image might have Pixels=1702x1798 for Size={851, 899}

instead! :-) I understand the idea of NSBitmapImageRep generating the image with a higher resolution. This is actually pretty cool. But how does NSBitmapImageRep know which pixel resolution to choose? How does it derive Pixels=1702x1798  when I create the imageRep with a {{0, 0}, {851, 899} rect?

Thanks a lot!!

Andreas








_______________________________________________

Cocoa-dev mailing list (email@hidden)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:

This email sent to email@hidden


  • Follow-Ups:
    • Re: drawRect: wrong scale in a programmatically created window
      • From: Graham Cox <email@hidden>
    • Re: drawRect: wrong scale in a programmatically created window
      • From: Quincey Morris <email@hidden>
References: 
 >drawRect: wrong scale in a programmatically created window (From: Andreas Höschler <email@hidden>)
 >Re: drawRect: wrong scale in a programmatically created window (From: Quincey Morris <email@hidden>)

  • Prev by Date: Re: OT: Swift Code Autoformatter?
  • Next by Date: Re: OT: Swift Code Autoformatter?
  • Previous by thread: Re: drawRect: wrong scale in a programmatically created window
  • Next by thread: Re: drawRect: wrong scale in a programmatically created window
  • Index(es):
    • Date
    • Thread