Photoshop Plugin باستخدام Cocoa - كيفية الحصول على معاينة
سؤال
أقوم بتنفيذ برنامج تشغيل فوتوشوب على جهاز 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);