如何在iphone上的图像上逐个像素地添加颜色?

时间:2012-01-26 23:35:18

标签: ios image image-processing ios5

这是我关于图像处理的第一个任务。我假设输出图像上每个像素的索引表示为下面的矩阵:

00 01 02 03 04 05

10 11 12 13 14 15

20 21 22 23 24 25

在输出图像的每个索引处,我有不同的颜色可供绘制。例如,在索引00处,我可以将红色放在那里,依此类推其他索引。我的问题是如何将这些颜色绘制到索引中以创建输出图像?

更新

这就是我现在所拥有的:

 inputImgAvg //Image for processing
 CGContextRef context = UIGraphicsGetCurrentContext();

 float  yy = groutW / 2;            // skip over grout on edge
     float stride =(int) (tileW + groutW +0.5);
        for(int y=0; y<tilesY; y++) {               //Number tile in Y direction
            float xx = groutW / 2 ;         // skip over grout on edge
            for(int x=0; x<tilesX; x++) {
                tileRGB = [inputImgAvg colorAtPixel:CGPointMake(x,y)];

                //Right here I'm checking tileRGB with list of available color
                //Find out the closest color 
                //Now i'm just checking with greenColor

                // best matching tile is found in idx position in vector;
                // scale and copy it into proper location in the output
                CGContextSetFillColor(context, CGColorGetComponents( [[UIColor greenColor] CGColor]));

但是我收到了这个错误。你能指出我做错了什么吗?

<Error>: CGContextSetFillColor: invalid context 0x0
<Error>: CGContextFillRects: invalid context 0x0

1 个答案:

答案 0 :(得分:2)

这个主题回答了这个问题:

http://www.iphonedevsdk.com/forum/iphone-sdk-development/34247-cgimage-pixel-array.html

使用CGBitmapContextCreate创建CGContext,它允许您提供图像的数据。然后,您可以使用指针将像素写入数据并自行设置字节。

完成后,使用UIGraphicsGetImageFromCurrentContext()或等效文件将上下文数据抓取到UIImage对象中。

如果这一切看起来有点低级别,另一种选择就是创建一个CGContext并在其中绘制1x1矩形。它不会非常快,但它不会像你想象的那么慢,因为CG函数都是纯C并且编译器会优化任何冗余:

//create drawing context
UIGraphicsBeginImageContextWithOptions(CGSizeMake(width, height), NO, 0.0f);
CGContextRef context = UIGraphicsGetCurrentContext();  

//draw pixels
for (int x = 0; x < width; x++)
{
   for (int y = 0; y < height; y++)
   {
      CGContextSetFillColor( ... your color here ... );
      CGContextFillRect(context, CGRectMake(x, y, 1.0f, 1.0f));
   }
}

//capture resultant image
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();