iPhone 的 NSBitmapImageRep (或 CGImage 的直接像素访问)?

Wil*_*oss 5 iphone objective-c

NSBitmapImageRepUIKit 中有一个很好的模拟吗?具体来说,我正在寻找与setPixel:atX:y:和类似的方法getPixel:atX:y:。我找到了这个技术说明,它确实让我了解了使用 CGImage 的大部分方法,但是我如何知道像素的顺序是什么?

dra*_*ard 4

CGImageGetBitsPerComponent( image );
CGImageGetBitsPerPixel( image );
CGImageGetBytesPerRow( image );
CGImageGetBitmapInfo( image );
CGColorSpaceGetModel( CGImageGetColorSpace( image ) );
CGColorSpaceGetNumberOfComponents( CGImageGetColorSpace( image ) );
Run Code Online (Sandbox Code Playgroud)

使用上面的调用,您可以弄清楚每个像素的布局方式。x,y 的每个像素将从以下位置开始:

length = CGImageGetBitsPerPixel(image)/CHAR_BIT;
offset = y*CGImageGetBytesPerRow(image) + x*length;
Run Code Online (Sandbox Code Playgroud)

典型的 32 位 ARGB PNG 可能是:

8 = CGImageGetBitsPerComponent( image );
32 = CGImageGetBitsPerPixel( image );
kCGImageAlphaFirst = CGImageGetBitmapInfo( image );
4 = CGColorSpaceGetNumberOfComponents( CGImageGetColorSpace( image ) );
kCGColorSpaceModelRGB = CGColorSpaceGetNumberOfComponents( CGImageGetColorSpace( image ) );
Run Code Online (Sandbox Code Playgroud)