[OSX]NSImage -> TPixmap
Übersicht

![]() |
ChaosCoderBetreff: [OSX]NSImage -> TPixmap |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hey Leute, sitze gerade vor einem Problem.
Ich habe in ObjC ein NSImage welches ich gern in meiner BlitzMax-Applikation benutzen würde (als TPixmap bzw TImage), habe aber keine Ahnung wie ich das realisieren könnte. Ich habe auch keine Chance an den Pfad des NSImage zu kommen. Im Prinzip müsste ich ja irgendwie eine Funktion basteln, die die reinen Bitmap-Daten eines NSImage so im Arbeitsspeicher hinterlässt, sodass man eine TPixmap erzeugen kann, die diese Daten dann nutzt... Wenn jemand mir auch noch sagen kann, wie genau ich eine Funktion in ObjC dann in BlitzMax nutzen kann, fände ich das super. ![]() Hat vielleicht jemand schonmal Erfahrung damit gemacht? Liebe Grüße, ChaosCoder |
||
Projekte: Geolaria | aNemy
Webseite: chaosspace.de |
Macintosh |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Weis wie das geht, habs auch schon gemacht, habe auch den code :)
ABER: das TPixmap was dur meinen code erzeugt wird, hat ein par fehler. Man aknnn es nur zeichnen, alles andere geht schief :/ um an die BitmapDaten eines TImage zu kommen must du ein NSBitmapImageRef object erzeugen. dieses hat die methode - data, mit der du an die daten kommst. Die musst du dann noch in dein pixmap kopieren und schon läufts (allerdings nicht richtig :/) hier der code: Code: [AUSKLAPPEN] #import <AppKit/AppKit.h> typedef struct bbpixmap bbpixmap; struct bbpixmap{ void *class; int refs; unsigned char *pixels; int width,height,pitch,format,capacity; }; const static char BytesPerPixel[]={0,1,1,3,3,4,4}; bbpixmap * BBPixmapWithCGImage(CGImageRef image, int format, int align) { NSBitmapImageRep * bitmap = [[NSBitmapImageRep alloc] initWithCGImage:image]; struct bbpixmap * pixmap; int bytesPerPixel, bitsPerPixel, bytesPerRow; int height, width; unsigned char * data; BOOL alpha = NO; bytesPerPixel = [bitmap samplesPerPixel]; bitsPerPixel = [bitmap bitsPerPixel]; bytesPerRow = [bitmap bytesPerRow]; height = CGImageGetHeight(image); width = CGImageGetWidth(image); data = [bitmap bitmapData]; pixmap->width = width; pixmap->height = height; pixmap->format = format; pixmap->pitch = (width*BytesPerPixel[format]+(align-1))/align*align; pixmap->capacity = pixmap->pitch*height; pixmap->pixels = malloc(pixmap->capacity); int i = 0; for (i = 0; i < height; i++) { memcpy(pixmap->pixels + (i*pixmap->pitch), data + (i*bytesPerRow+1), bytesPerRow); } [bitmap release]; CGImageRelease(image); return pixmap; } mit der funktion stimmt iwas nicht... habe die nur schnell zu testzwecken geschrieben. solltest nochmal drüberschauen, gibt es sicher noch etwas zu verbessern. Format muss 6 sein, glaub ich. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group