• 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: Doubled Pixels
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Doubled Pixels


  • Subject: Re: Doubled Pixels
  • From: "Gerriet M. Denkmann" <email@hidden>
  • Date: Sat, 24 Jun 2017 13:46:46 +0700

> On 23 Jun 2017, at 23:37, Jens Alfke <email@hidden> wrote:
>
>
>> On Jun 23, 2017, at 8:45 AM, Gerriet M. Denkmann <email@hidden> wrote:
>>
>> the image looks fine, but when I write subData to disk, it has 64 x 64
>> pixels.
>
> You’re probably running this on a computer with a Retina display, so NSImage
> creates a 2x-resolution backing store by default.
Yes, you are right; I should have mentioned this.

>
> Try creating an NSBitmapImageRep directly, then focus on it and draw.
> —Jens

> By making the NSBitMapRepresentation yourself, creating a context for it,
> drawing to that.
> —Graham

You severely underestimate the depth of my ignorance. It took me half a day to
fathom your (for me) cryptic remarks.
But thanks a lot for pointing me in the right direction!

This is what I did come up with (all error handling removed)  (things I am not
quite sure are marked with “??”).
If there is anything I am doing wrong (or could do better) please tell me:


- (NSData *)subImagePngDataWithRect: (NSRect)subRect  useColour: (BOOL)useColour
{
        //      1.      create newSubRep (NSBitmapImageRep)

        NSString *colorSpaceName = useColour ? NSDeviceRGBColorSpace :
NSDeviceWhiteColorSpace; //      ??
        NSInteger samplesPerPixel = useColour ? 4 : 2;

        NSInteger pixelsWide = (NSInteger)ceil(subRect.size.width);
        NSInteger pixelsHigh = (NSInteger)ceil(subRect.size.height);
        NSInteger bitsPerSample = 8;
        NSInteger bitsPerPixel = samplesPerPixel * bitsPerSample;
        NSInteger bytesPerRow = pixelsWide * bitsPerPixel / 8;

        //       there is another initializer with bitmapFormat - don't know
what to use
        NSBitmapImageRep *newSubRep =   [ [NSBitmapImageRep alloc]
initWithBitmapDataPlanes:       NULL

                pixelsWide:                             pixelsWide

                pixelsHigh:                             pixelsHigh

                bitsPerSample:                  bitsPerSample

                samplesPerPixel:                        samplesPerPixel

                hasAlpha:                               YES

                isPlanar:                                       NO      //

                                colorSpaceName:
colorSpaceName

                bytesPerRow:                            bytesPerRow

                bitsPerPixel:                           bitsPerPixel
                                                                        ];


        //      2.      create context (NSGraphicsContext) from newSubRep and
make it current

        NSGraphicsContext *context = [ NSGraphicsContext
graphicsContextWithBitmapImageRep: newSubRep ];
        [ NSGraphicsContext setCurrentContext: context ];


        //      3.      draw allRep (NSBitmapImageRep) to currentContext

        NSBitmapImageRep *allRep = (NSBitmapImageRep
*)self.image.representations.firstObject;
        NSRect destRect = NSZeroRect; destRect.size = subRect.size;
        BOOL ok =       [ allRep        drawInRect:             destRect
                                                fromRect:               subRect
                                                operation:
NSCompositingOperationCopy
                                                fraction:
1
                                                respectFlipped: NO      //
??
                                                hints:                  nil
                                ];


        //      4. get pngData from newSubRep

        return [ newSubRep representationUsingType: NSPNGFileType  properties:
@{} ];
}

Gerriet.


_______________________________________________

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: Doubled Pixels
      • From: Graham Cox <email@hidden>
References: 
 >Doubled Pixels (From: "Gerriet M. Denkmann" <email@hidden>)
 >Re: Doubled Pixels (From: Jens Alfke <email@hidden>)

  • Prev by Date: Expired PersistentConnectionLogging.mobileconfig and TN 2265
  • Next by Date: Re: UIDocumentBrowserViewController and file package documents
  • Previous by thread: Re: Doubled Pixels
  • Next by thread: Re: Doubled Pixels
  • Index(es):
    • Date
    • Thread