Frage

Ich bin die Implementierung eine Photoshop-Plugin auf dem Mac, und ich tue es Cocoa verwenden. ok so weit zu tun, aber der nächste Schritt ist es, ein „Vorschau“ Bild als Teil meiner Plugin-Fenster zu schaffen, und ich bin fest. Ich bin ein n00b Obj-C-Programmierer, die :-)

nicht wirklich helfen wird

Bisher habe ich habe so etwas wie folgt aus:

int dataSize = gFilterRecord->bigDocumentData->wholeSize32.v *
               gFilterRecord->bigDocumentData->wholeSize32.h *
               gFilterRecord->planes; 

NSData *inData = [[NSData alloc] initWithBytesNoCopy:gFilterRecord->inData length:dataSize freeWhenDone:NO];
NSLog(@"LoadImageFromSDK : Data created");
NSImage *imageTmp = [[NSImage alloc] initWithData:inData];
NSLog(@"LoadImageFromSDK : Image created");

//Save to PNG file as a test of this image creation
[[imageTmp TIFFRepresentation] writeToFile:@"/tmp/imageTmp.tif" atomically:YES];
NSLog(@"LoadImageFromSDK : Wrote image to disk");

Im Moment stürzt es fürchterlich auf:
    09/07/22 10.23.32 Adobe Photoshop Elements [46628] *** NSCopyMemoryPages (0x0, 0x245f4000, 2265088) ist fehlgeschlagen

Ich Berechnung wahrscheinlich die Größe von inData falsch. Hilfe?

Auch wird NSImage Lage sein, die Bilddaten blob richtig zu interpretieren? Oder soll ich es aufgeben und nur tun, um ein Pixel-für-Pixel-Mapping in die NSImage?

War es hilfreich?

Lösung

Ok, das war viel schmerzhafter, um herauszufinden, als ich erwartet hatte. Auch ein großes Lob an NVidia für dieses Posting PDF , die ein bessere Erklärung des Photoshop SDK Filter Rekord als die tatsächlichen SDK-Dokumentation.

Dieser Code tatsächlich die inData liest und erzeugt ein brauchbares NSImage (viele Protokollierung nur, um herauszufinden, was es tut, fühlen Sie sich frei zu entfernen) zusätzlich zu der Probe tif-Datei für Debugging-Zwecke.

NSLog(@"Entering LoadImageFromSDK");

unsigned char *bitmapPlanes[4];    
bitmapPlanes[0] = (unsigned char *) (gFilterRecord->inData);

NSLog(@"Params to create bitmap");
NSLog(@"pixelsWide = %d", gFilterRecord->bigDocumentData->imageSize32.h );
NSLog(@"pixelsHigh = %d", gFilterRecord->bigDocumentData->imageSize32.v );
NSLog(@"bitsPerSample = %d", gFilterRecord->depth );
NSLog(@"samplesPerPixel = %d", gFilterRecord->planes );
NSLog(@"hasAlpha = %d", NO );
NSLog(@"isPlanar = %d", NO );
NSLog(@"colorSpaceName = %@", mapImageModeToColorSpace(gFilterRecord->imageMode) );
NSLog(@"bytesPerRow = %d", gFilterRecord->inRowBytes );
NSLog(@"bitsPerPixel = %d", gFilterRecord->depth*gFilterRecord->planes );    

NSBitmapImageRep *bitmapTmp = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:bitmapPlanes
                                                                      pixelsWide:gFilterRecord->bigDocumentData->imageSize32.h
                                                                      pixelsHigh:gFilterRecord->bigDocumentData->imageSize32.v
                                                                   bitsPerSample:gFilterRecord->depth
                                                                 samplesPerPixel:gFilterRecord->planes
                                                                        hasAlpha:NO 
                                                                        isPlanar:NO 
                                                                  colorSpaceName:mapImageModeToColorSpace(gFilterRecord->imageMode) 
                                                                     bytesPerRow:gFilterRecord->inRowBytes
                                                                    bitsPerPixel:gFilterRecord->depth*gFilterRecord->planes];

NSLog(@"LoadImageFromSDK : Bitmap created = %@", bitmapTmp);

[[bitmapTmp TIFFRepresentation] writeToFile:@"/Users/someuser/temp/sample.tif" atomically:YES];


NSImage *imageTmp = [[NSImage alloc] initWithSize:[bitmapTmp size]];
[imageTmp addRepresentation:bitmapTmp];
NSLog(@"LoadImageFromSDK : Image created = %@", imageTmp);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top