[OSX]NSImage -> TPixmap

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

ChaosCoder

Betreff: [OSX]NSImage -> TPixmap

BeitragSo, Okt 10, 2010 5:02
Antworten mit Zitat
Benutzer-Profile anzeigen
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. Smile

Hat vielleicht jemand schonmal Erfahrung damit gemacht?

Liebe Grüße,
ChaosCoder
Projekte: Geolaria | aNemy
Webseite: chaosspace.de
 

Macintosh

BeitragSo, Okt 10, 2010 14:30
Antworten mit Zitat
Benutzer-Profile anzeigen
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.

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group