ココアを使用してPhotoshopのプラグイン - プレビューを取得する方法
質問
私は、Mac上でPhotoshopのプラグインを実装しています、と私はココアを使用してそれをやっています。これまで[OK]をやってますが、次のステップは、私のプラグインウィンドウの一環として、「プレビュー」画像を提供することであり、私はこだわっています。私は本当に
:-)支援していませんN00BのObj-Cプログラマ、よこれまでのところ、私はこのような何かを持っています
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");
:
現時点では、それは上恐ろしくクラッシュ 09/07/22 10時23分32秒AMのAdobe Photoshop Elementsの[46628] *** NSCopyMemoryPages(0x0の、0x245f4000、2265088)は失敗した。
私はおそらく間違ってinDataの大きさのサイズを計算しています。助けて?
また、NSImageでは、正しくその画像データブロブを解釈することができるようになるだろうか?または私はそれを放棄し、ただNSImageではへのピクセルごとのマッピングを行う必要がありますか?
解決
[OK]を、それは私が予想していたよりも把握する方法がより苦痛でした。あるこの PDF に投稿するためのNVidiaにも、賛辞実際のSDKドキュメントよりもPhotoshopのSDKフィルタレコードのより良い説明。
このコードは、実際にデバッグ目的のためにサンプルTIFファイルに加えて、(ログ記録の多くはそれが何をしているかを把握するために、削除して自由に感じる)inDataの大きさを読み取って、使用可能な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);
所属していません StackOverflow