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 protected])
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:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com
This email sent to [email protected]