从RGB数据创建图像?

时间:2011-08-29 21:06:50

标签: iphone xcode image rgb

我遇到了这个问题。我有一些原始的rgb数据,值从0到255,并希望将其显示为iphone上的图像,但无法找到如何操作。有人可以帮忙吗?我想我可能需要使用CGImageCreate,但只是不明白。试着查看课程参考,感觉很困难。

我想要的只是从一些计算中生成的10x10灰度图像,如果有一种简单的方法可以创建一个png或者很棒的东西。

3 个答案:

答案 0 :(得分:13)

一个非常原始的例子,类似于Mats的建议,但这个版本使用外部像素缓冲区(pixelData):

const size_t Width = 10;
const size_t Height = 10;
const size_t Area = Width * Height;
const size_t ComponentsPerPixel = 4; // rgba

uint8_t pixelData[Area * ComponentsPerPixel];

// fill the pixels with a lovely opaque blue gradient:
for (size_t i=0; i < Area; ++i) {
    const size_t offset = i * ComponentsPerPixel;
    pixelData[offset] = i;
    pixelData[offset+1] = i;
    pixelData[offset+2] = i + i; // enhance blue
    pixelData[offset+3] = UINT8_MAX; // opaque
}

// create the bitmap context:
const size_t BitsPerComponent = 8;
const size_t BytesPerRow=((BitsPerComponent * Width) / 8) * ComponentsPerPixel;
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef gtx = CGBitmapContextCreate(&pixelData[0], Width, Height, BitsPerComponent, BytesPerRow, colorSpace, kCGImageAlphaPremultipliedLast);

// create the image:
CGImageRef toCGImage = CGBitmapContextCreateImage(gtx);
UIImage * uiimage = [[UIImage alloc] initWithCGImage:toCGImage];

NSData * png = UIImagePNGRepresentation(uiimage);

// remember to cleanup your resources! :)

答案 1 :(得分:2)

使用CGBitmapContextCreate()为自己创建基于内存的位图。然后调用CGBitmapContextGetData()以获取绘图代码的指针。然后CGBitmapContextCreateImage()创建CGImageRef

我希望这足以让你开始。

答案 2 :(得分:0)

在Mac OS上,您可以使用NSBitmapImageRep执行此操作。对于iOS来说,它似乎有点复杂。我找到了这篇博文:

http://paulsolt.com/2010/09/ios-converting-uiimage-to-rgba8-bitmaps-and-back/