Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 快速检测和移除NSImage周围透明空间的方法_Cocoa_Transparency_Nsimage_Cgimage_Core Image - Fatal编程技术网

Cocoa 快速检测和移除NSImage周围透明空间的方法

Cocoa 快速检测和移除NSImage周围透明空间的方法,cocoa,transparency,nsimage,cgimage,core-image,Cocoa,Transparency,Nsimage,Cgimage,Core Image,修剪图像(NSImage或CGImageRef)以删除图像周围所有透明区域的最快方法是什么 我可以想象我可以从顶部开始观察每个像素并确定其alpha值,但也许还有另一种(更快的)方法 谢谢,马克 PS:我的用例: 我正在使用QLThumbnailImageCreate生成文件的缩略图。问题是该调用返回的所有图像的宽度和高度都相同 例如,如果我为一张尺寸为300x500的照片创建一个缩略图,得到的预览将具有相同的宽度和高度,并在顶部和底部添加透明区域以保持纵横比。如果你只获得一个指向原始像素数据的

修剪图像(NSImage或CGImageRef)以删除图像周围所有透明区域的最快方法是什么

我可以想象我可以从顶部开始观察每个像素并确定其alpha值,但也许还有另一种(更快的)方法

谢谢,马克

PS:我的用例:

我正在使用
QLThumbnailImageCreate
生成文件的缩略图。问题是该调用返回的所有图像的宽度和高度都相同


例如,如果我为一张尺寸为300x500的照片创建一个缩略图,得到的预览将具有相同的宽度和高度,并在顶部和底部添加透明区域以保持纵横比。

如果你只获得一个指向原始像素数据的指针,在图像中的像素上进行迭代实际上非常快。即使在iOS设备上,这也相当快

使用
CGImageRef
可以获得如下像素数据:

CFDataRef imageData = CGDataProviderCopyData(CGImageGetDataProvider(anImage)); 
const UInt32 *pixels = (const UInt32*)CFDataGetBytePtr(imageData);
您可以在其中进行迭代:

for (int j = 0; j < (anImageHeight * anImageWidth); j++)
{
    if (pixels[j] & 0xff000000)
    {
    //this is not a transparent pixel
    }
}
for(int j=0;j<(anImageHeight*anImageWidth);j++)
{
if(像素[j]&0xff000000)
{
//这不是透明像素
}
}