有麻烦操纵像素

时间:2014-01-04 20:44:35

标签: ios pixel rgba

我正在尝试识别一些像素颜色,但我认为我不清楚人们在做什么。 我在这里和谷歌看过很多示例代码,但我想我错过了一些东西。

以下是我调用方法的方法:

app.h

UIImage *image;

app.m

- (id)init {

    self = [super init];
    if(self) {
...
image = [UIImage imageNamed:@"bwimage.bmp"];
...

[self checkRailBW:image :x_pos :y_pos]

...

以下是方法:

-(BOOL)checkRailBW: (UIImage*)background : (CGFloat)x : (CGFloat)y{


CGImageRef image = background.CGImage;
NSUInteger width = CGImageGetWidth(background);
NSUInteger height = CGImageGetHeight(background);

// Setup 1x1 pixel context to draw into
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
unsigned char rawData[4];
int bytesPerPixel = 4;
int bytesPerRow = bytesPerPixel;
NSUInteger bitsPerComponent = 8;
CGContextRef context = CGBitmapContextCreate(rawData,
                                             1,
                                             1,
                                             bitsPerComponent,
                                             bytesPerRow,
                                             colorSpace,
                                             kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
CGColorSpaceRelease(colorSpace);
CGContextSetBlendMode(context, kCGBlendModeCopy);

// Draw the image
CGContextDrawImage(context,
                   CGRectMake(x, y-height, width, height),
                   image);

// Done
CGContextRelease(context);

// Get the pixel information
unsigned char red   = rawData[0];
unsigned char green = rawData[1];
unsigned char blue  = rawData[2];
unsigned char alpha = rawData[3];
}

我永远无法获得有关红色,绿色或蓝色的任何数据。

顺便说一句......我正在追踪黑色像素。我正在处理黑白图像,因此它有1位/像素。

谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

您总是将图像的左上角像素绘制到1x1上下文中。您需要更改所需的CGRect的原点以在正确的位置绘制所需的像素,或者设置当前的变换矩阵以抵消绘制发生的位置,以便所讨论的像素落在你的背景的起源。

但你可能不应该做其中任何一种,因为这是一种超低效的方式来获得你想要的东西。你到底想要做什么?你显然想要图像中像素的颜色,但出于什么目的?你在迭代图像中的所有像素吗?如果是这样,你应该将图像绘制成位图一次,然后使用指针算法来获得你想要测试的像素。

或者,如果您尝试以某种方式修改像素,则应使用其他工具,例如CoreImage或OpenGL。