cocoa - 检测和删除图像周围透明空间的最快方法

标签 cocoa transparency nsimage cgimage core-image

修剪图像(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
    }
}

关于cocoa - 检测和删除图像周围透明空间的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6290341/

相关文章:

iphone - 使用 Accelerate 框架进行 FFT 时如何设置缓冲区?

objective-c - 迭代 NSTableView 中的 View

c++ - 在 OpenGl 和 OpenFrameworks 中使 3d 模型透明

java - 尝试在导入的 bmp 图像中设置透明度

swift - swift 中 forEach 循环的进度条

objective-c - 具有高分辨率图像的 NSImageView 在调整窗口大小时会导致极度减速

cocoa - 绑定(bind)枚举属性最简洁的方法是什么?

objective-c - 调整 NSCollectionView 的大小以适应内部项目?

swift - 透明度(alpha)从 swift 的第二次运行中被删除

cocoa - NSImage w/BitmapImageRep -> CIImage 反转颜色 -> NSImage w/BitmapImageRep,色彩空间问题