gpt4 book ai didi

cocoa - 使用 Cocoa 的 Photoshop 插件 - 如何获取预览

转载 作者:行者123 更新时间:2023-12-03 17:27:15 25 4
gpt4 key购买 nike

我正在 Mac 上实现一个 Photoshop 插件,并且使用 Cocoa 来实现。到目前为止一切正常,但下一步是提供“预览”图像,作为我的插件窗口的一部分,但我陷入了困境。我是一名一流的 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 Adob​​e Photoshop Elements[46628] *** NSCopyMemoryPages(0x0, 0x245f4000, 2265088) 失败

我可能错误地计算了 inData 的大小。帮助?

此外,NSImage 是否能够正确解释该图像数据 blob?或者我应该放弃它,只对 NSImage 进行逐像素映射?

最佳答案

好吧,弄清楚这个问题比我预想的要痛苦得多。另外,感谢 NVidia 发布此文章 PDF这是对 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);

关于cocoa - 使用 Cocoa 的 Photoshop 插件 - 如何获取预览,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1166580/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com