我有一个数组,其中包含320 x 180显示中每个像素的RGB颜色值。我希望能够在屏幕外相同大小的位图上下文中设置单个像素值,然后在视图中显示位图上下文。
似乎我必须创建1x1 rects并在它们上面设置一个笔划或者在该点上设置长度为1的线。那是对的吗?我正在寻找一种非常有效的方法将数组数据放到图形上下文中,你可以想象这将是一个以每秒25帧的速度循环的图像缓冲区,并且以这种方式绘制似乎效率低下。
我想另一个问题是我应该使用OPENGL ES吗?
非常感谢思考/最佳实践。
此致
戴夫
好的,已经走了一小段路,但无法做出最后的障碍,我不确定为什么这不起作用:
- (void) displayContentsOfArray1UsingBitmap: (CGContextRef)context
{
long bitmapData[WIDTH * HEIGHT];
// Build bitmap
int i, j, h;
for (i = 0; i < WIDTH; i++)
{
for (j = 0; j < HEIGHT; j++)
{
h = frameBuffer01[i][j];
bitmapData[i * j] = h;
}
}
// Blit the bitmap to the context
CGDataProviderRef providerRef = CGDataProviderCreateWithData(NULL, bitmapData,4 * WIDTH * HEIGHT, NULL);
CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB();
CGImageRef imageRef = CGImageCreate(WIDTH, HEIGHT, 8, 32, WIDTH * 4, colorSpaceRef, kCGImageAlphaFirst, providerRef, NULL, YES, kCGRenderingIntentDefault);
CGContextDrawImage(context, CGRectMake(0.0, HEIGHT, WIDTH, HEIGHT), imageRef);
CGImageRelease(imageRef);
CGColorSpaceRelease(colorSpaceRef);
CGDataProviderRelease(providerRef);
}
答案 0 :(得分:1)
阅读CGImageCreate()
的文档。基本上,您必须从像素阵列创建CGDataProvider(使用CGDataProviderCreateDirect()
),然后使用此数据提供程序作为源创建CGImage
。然后,您可以将图像绘制到任何上下文中。要做到这一点有点单调乏味,因为这些函数需要很多参数,但文档非常好。
答案 1 :(得分:1)
戴夫,
blitting代码工作正常,但是从帧缓冲区复制的代码不正确。
// Build bitmap
int i, j, h;
for (i = 0; i < WIDTH; i++)
{
for (j = 0; j < HEIGHT; j++)
{
h = frameBuffer01[i][j];
bitmapData[/*step across a line*/i + /*step down a line*/j*WIDTH] = h;
}
}
请注意我对bitmapData元素赋值的更改。
不知道框架的布局,这可能仍然是不正确的,但是从您的代码中,这看起来更接近意图。