2009-07-22 8 views
1

MacでPhotoshopプラグインを実装しています。私はCocoaを使用しています。これまでのところOKですが、次のステップは、プラグインウィンドウの一部として「プレビュー」イメージを提供することです。私は立ち往生しています。現時点でCocoaを使用したPhotoshopプラグイン - プレビューの入手方法

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"); 

、それは恐ろしく上のクラッシュ:
私は本当に:-)

を支援されていない今のところ、私はこのような何かを持っているN00BのObj-Cプログラマ、よ 09/07/22 10時23分32秒AMのAdobe Photoshop Elementsの[46628] *** NSCopyMemoryPages(0x0の、0x245f4000、2265088)は、私はおそらく間違ってinDataの大きさのサイズを計算しています

に失敗しました。助けて?

また、NSImageは画像データのBLOBを正しく解釈できるようにする予定ですか?または、私はそれをあきらめて、NSImageにピクセルごとのマッピングを行うだけですか?

答えて

0

これは、私が予想していた以上に痛いものでした。また、このPDFを投稿したNVidiaには、実際のSDKドキュメントよりもPhotoshop SDKフィルタレコードの方がはるかに優れています。

このコードは実際には、デバッグの目的でサンプルのtifファイルに加えて、使用可能なNSImage(何をしているのか把握するだけのロギング、自由に削除できます)を生成します。

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); 
関連する問題