这是我关于图像处理的第一个任务。我假设输出图像上每个像素的索引表示为下面的矩阵:
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
答案 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();