Just a fast code lesson:
Assumptions:
gfx_data (uchar) –> our “traditional” RGB image buffer
IVFinalexture (NSImageView) –> where we want to view our image
bmp (NSBitmapImageRep) –> Temporal, to store the rgb buffer
img (NSImage) –> Temporal, to store the Bitmap
So the sequence (more or less) is:
uchar buffer –> NSBitmapImageRep –> NSImage –> NSImageView
unsigned char *gfx_data; int gfx_width = 256; int gfx_heigth = 256; int gfx_samplespp = 3; gfx_data = malloc (gfx_width*gfx_heigth*gfx_samplespp); int i=0; int max = gfx_width*gfx_heigth*gfx_samplespp; for (i=0; i<(max);i+=3) { // Do your demoscene-fancy effect here int valor = sin((float)i*4.0/(float)(gfx_width*gfx_heigth))*255.0; if (valor<0) valor="valor*-1; gfx_data[i]= valor; } // Convert buffer to NSBitmapImageRep NSBitmapImageRep* bmp = [[NSBitmapImageRep alloc]initWithBitmapDataPlanes:&gfx_data pixelsWide: gfx_width pixelsHigh: gfx_heigth bitsPerSample: 8 samplesPerPixel: gfx_samplespp hasAlpha: NO isPlanar: NO colorSpaceName: NSCalibratedRGBColorSpace bytesPerRow: (gfx_width*gfx_samplespp) bitsPerPixel: 24]; // Store the NSBitmapImageRep in a NSImage structure NSImage *img = [NSImage alloc]; [img addRepresentation:bmp]; // Set the NSImage into the NSImageView (IVFinaltexture) if ([IVFinaltexture image]!=nil) [[IVFinaltexture image] release]; [IVFinaltexture setImage:img]; //free (gfx_data); // WTF! system crashes if I uncomment this! [bmp release]; [img release];
I think that I’ve some problems releasing the data, but I think that you can make an idea of the process, I’m not describing how to write code, just explaining a process to display an image buffer in Cocoa (in my opinion, not properly documented).
————–
And… obviously… the result!!
.happy coding!!