Skip navigation.
 
mlRe: Creating an NSImage from a bitmap
FROM : Hidetomo Katsura
DATE : Thu Aug 10 19:46:23 2006

Craig,

this seems to work. you need to use an alpha plane and hasAlpha:YES 
if you want a transparent center.

- (NSImage *)black16x16SquareImage
{
   static unsigned char pattern[] =
   {
       0xff, 0xff,
       0xff, 0xff,
       0xc0, 0x03,
       0xc0, 0x03,
       0xc0, 0x03,
       0xc0, 0x03,
       0xc0, 0x03,
       0xc0, 0x03,
       0xc0, 0x03,
       0xc0, 0x03,
       0xc0, 0x03,
       0xc0, 0x03,
       0xc0, 0x03,
       0xc0, 0x03,
       0xff, 0xff,
       0xff, 0xff
   };

   NSBitmapImageRep *glyph;
   NSImage *image;
   unsigned char *planes[ 2 ];
   
   planes[ 0 ] = pattern;    // black
   planes[ 1 ] = pattern;    // alpha
   glyph = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:&planes[ 0 ]
               pixelsWide:16
               pixelsHigh:16
               bitsPerSample:1
               samplesPerPixel:2
               hasAlpha:YES
               isPlanar:YES
               colorSpaceName:NSDeviceBlackColorSpace
               bytesPerRow:2
               bitsPerPixel:0];
   image = [[NSImage alloc] initWithSize:NSMakeSize( 16, 16 )];
   [image addRepresentation:glyph];

   return [image autorelease];
}

regards,
katsura

On Aug 10, 2006, at 9:01 AM, Craig Dooley wrote:

> I am attempting to take a bitmap, and generate a black/transparent
> NSImage from it.  The following example is attempting to draw a 16x16
> square in black, that is transparent in the center.  It does create a
> 16x16 NSImage, which i can display, but only the top line and one
> pixel on the second row are black, and the rest is white.  Is there
> any way to do this, or do i need to translate the data to another
> format first?
>
> unsigned char pattern[] = {
>     0xff, 0xff,
>     0xff, 0xff,
>     0xc0, 0x03,
>     0xc0, 0x03,
>     0xc0, 0x03,
>     0xc0, 0x03,
>     0xc0, 0x03,
>     0xc0, 0x03,
>     0xc0, 0x03,
>     0xc0, 0x03,
>     0xc0, 0x03,
>     0xc0, 0x03,
>     0xc0, 0x03,
>     0xc0, 0x03,
>     0xff, 0xff,
>     0xff, 0xff
> };
>
> unsigned char *planes[] = ;
> glyph = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:planes
>             pixelsWide:16
>             pixelsHigh:16
>             bitsPerSample:1
>             samplesPerPixel:1
>             hasAlpha:NO
>             isPlanar:NO
>             colorSpaceName:NSDeviceBlackColorSpace
>             bytesPerRow:0
>             bitsPerPixel:0];
> image = [[NSImage alloc] init];
> [image addRepresentation:glyph];
>
> -Craig

Related mailsAuthorDate
mlCreating an NSImage from a bitmap Craig Dooley Aug 10, 18:01
mlRe: Creating an NSImage from a bitmap Daniel Jalkut Aug 10, 19:42
mlRe: Creating an NSImage from a bitmap Hidetomo Katsura Aug 10, 19:46
mlRe: Re: Creating an NSImage from a bitmap Craig Dooley Aug 10, 21:45
mlRe: Creating an NSImage from a bitmap Hidetomo Katsura Aug 10, 22:01