【问题标题】:Fasted way to detect and remove transparent space around NSImage检测和删除图像周围透明空间的最快方法
【发布时间】:2011-06-09 08:57:08
【问题描述】:

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

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

谢谢,马克。

PS:我的用例:

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

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

【问题讨论】:

    标签: cocoa transparency nsimage cgimage core-image


    【解决方案1】:

    如果您只获得指向原始像素数据的指针,则实际上迭代图像中的像素非常快。即使在 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
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-10
      • 2019-09-29
      • 1970-01-01
      • 1970-01-01
      • 2019-12-18
      • 1970-01-01
      • 1970-01-01
      • 2018-06-18
      相关资源
      最近更新 更多