2009-07-22 4 views
1

Mac에서 포토샵 플러그인을 구현하고 있으며 코코아를 사용하고 있습니다. 지금까지는 괜찮 았지만 다음 단계는 플러그인 윈도우의 일부로 "미리보기"이미지를 제공하는 것입니다. 나는 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가 이미지 데이터 blob을 올바르게 해석 할 수 있습니까? 아니면 포기하고 NSImage에 픽셀 단위로 매핑해야합니까?

답변

0

좋아, 그건 내가 예상했던 것보다 더 고통 스러웠다. 또한 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); 
관련 문제