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