Photoshop Plugin باستخدام Cocoa - كيفية الحصول على معاينة

StackOverflow https://stackoverflow.com/questions/1166580

سؤال

أقوم بتنفيذ برنامج تشغيل فوتوشوب على جهاز 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 عناصر [46628] *** nscopymemorypages (0x0، 0x245f4000، 2265088) فشل

ربما أتحسب حجم Indata بشكل غير صحيح. مساعدة؟

أيضا، هل ستكون NSIMAGE قادرا على تفسير أن بيانات الصورة الباقة بشكل صحيح؟ أو يجب أن أعطيها وما عليك سوى تعيين خرائط بكسل في البكسل في NSIMAGE؟

هل كانت مفيدة؟

المحلول

حسنا، كان ذلك أكثر إيلاما لمعرفة ما كنت متوقعا. أيضا، مجد إلى نفيديا لنشر هذا بي دي إف وهو شرح أفضل لسجل عامل تصفية Photoshop SDK من مستندات SDK الفعلية.

يقرأ هذا الرمز بالفعل Indata وينتج NSIMAGE قابلة للاستخدام (الكثير من التسجيل لمجرد معرفة ما يفعله، لا تتردد في إزالة) بالإضافة إلى ملف TIF عينة لأغراض تصحيح الأخطاء.

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);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top