我正在尝试识别一些像素颜色,但我认为我不清楚人们在做什么。 我在这里和谷歌看过很多示例代码,但我想我错过了一些东西。
以下是我调用方法的方法:
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位/像素。
谢谢你的帮助!
答案 0 :(得分:1)
您总是将图像的左上角像素绘制到1x1上下文中。您需要更改所需的CGRect
的原点以在正确的位置绘制所需的像素,或者设置当前的变换矩阵以抵消绘制发生的位置,以便所讨论的像素落在你的背景的起源。
但你可能不应该做其中任何一种,因为这是一种超低效的方式来获得你想要的东西。你到底想要做什么?你显然想要图像中像素的颜色,但出于什么目的?你在迭代图像中的所有像素吗?如果是这样,你应该将图像绘制成位图一次,然后使用指针算法来获得你想要测试的像素。
或者,如果您尝试以某种方式修改像素,则应使用其他工具,例如CoreImage或OpenGL。