如何从UIImage中NSLog像素RGB?

3

我只想要:

1) 复制像素数据。
2) 迭代并修改每个像素(展示如何将ARGB值作为255用NSLog输出)
3) 从新的像素数据创建UIImage

如果有人能告诉我如何将一个像素的RGBA值作为255用NSLog输出,那我就可以自己详细了解。请告诉我如何修改以下代码以实现此目的。请具体说明!

-(UIImage*)modifyPixels:(UIImage*)originalImage
{

NSData* pixelData = (NSData*)CGDataProviderCopyData(CGImageGetDataProvider(originalImage.CGImage));
uint myLength = [pixelData length];

    for(int i = 0; i < myLength; i += 4) {


        //CHANGE PIXELS HERE
        /*
        Sidenote: Just show me how to NSLog them
        */
        //Example:
        //NSLog(@"Alpha 255-Value is: %u", data[i]);
        //NSLog(@"Red 255-Value is: %u", data[i+1]);
        //NSLog(@"Green 255-Value is: %u", data[i+2]);
        //NSLog(@"Blue 255-Value is: %u", data[i+3]);
    }

    //CREATE NEW UIIMAGE (newImage) HERE 

    return newImage;    
}
2个回答

3

这个方向对你有用吗?我会像这样获取像素数据:

UInt32 *pixels = CGBitmapContextGetData( ctx );

#define getRed(p) ((p) & 0x000000FF)
#define getGreen(p) ((p) & 0x0000FF00) >> 8
#define getBlue(p) ((p) & 0x00FF0000) >> 16
// display RGB values from the 11th pixel
NSLog(@"Red: %d, Green: %d, Blue: %d", getRed(pixels[10]), getGreen(pixels[10]), getBlue(pixels[10]));

4
你正在对数据格式进行假设。不能保证图像是32bpp ARGB格式。 - Lily Ballard

1
如果您想要实际查看图像,可以使用Florent Pillet的NSLogger: https://github.com/fpillet/NSLogger 这个想法是在桌面上启动NSLogger客户端,然后在您的应用程序中将其放置在顶部:
#import "LoggerClient.h"

并且在你的modifyPixels方法中,你可以像这样做:

LogImageData(@"RexOnRoids",        // Any identifier to go along with the log
             0,                    // Log level
             newImage.size.width,  // Image width
             newImage.size.height, // Image height
             UIImagePNGRepresentation(newImage)); // Image as PNG

在您的桌面上启动客户端,然后在 iPhone 上运行应用程序,您将看到真实的图像出现在客户端中。这对于调试图像问题非常方便,例如翻转、旋转、颜色、透明度等。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接