On 11.07.2008, at 05:37, Graham Cox wrote:

I'm using NSBitMapImageRep's -representationUsingType:properties:
method to convert data to JPEG, TIFF, etc. I'd like to be able to
specify the DPI of the image. I can calculate the right number of
pixels needed for a given DPI OK, but the image always comes up as
having 72 dpi when opened in another app. Is there a way to set this
property at this level, or am I forced to drop down into Image I/O?


If you create image data of Type jpeg, tiff, png, etc from a sourceRep
(NSBitMapImageRep) with -representationUsingType:properties: these data
contain the number of pixels *and* the resolution of the sourceRep.
If you want a special resolution you have to set that value in the
sourceRep. But you can't set the resolution directly in NSBitMapImageRep
with something like -setResolutionX:resolutionY: You have to set the
size of the rep! Because of:
    size.width = 72.0*pixelsWide / resolutionX
    size.height = 72.0*pixelsHigh / resolutionY
(size has the dimension of a length and the unit 1/72 inch;
 resolution has the dimension "dots per length" and the
unit "dots per inch"; pixelsWide, pixelsHigh are dimensionless numbers.)
there is no difference between setting the resolution and setting
the size.

If the rep shall have a resolution of 72 dpi, the size must be set
to (pseudocode) size = (pixelsWide, pixelsHigh); (Because this is the
default, you need not do so.) This is a bit confusing. A lot
of programmers think that size and number of pixels are one and the
same with different words. The values are indead *numerically* the same,
but only for a resolution of 72 dpi.

If the rep shall have a resolution of 144 dpi, the size must be set
to size = (pixelsWide/2.0, pixelsHigh/2.0);

For these settings in my programs I use a category for NSBitMapImageRep
which does the job.

One other point. Let's have a sourceRep with a resolution of 100 dpi
and this sourceRep is stored as png-file (data come from
-representationUsingType:properties:) then Preview.app will show a
resolution of 99.9998 dpi which is correct! This happens because in
png-files the resolution is stored as int with the unit "dots per meter":
res [dots per meter] = (int)(10000 / 2.54) = 3937
or:
res [dots per inch] = 3937*0.0254 = 99.9998

        Heinrich

--
Heinrich Giesen
[EMAIL PROTECTED]


_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

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:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to [EMAIL PROTECTED]

Reply via email to