Iphone 从RGB数据创建图像?

Iphone 从RGB数据创建图像?,iphone,xcode,image,rgb,Iphone,Xcode,Image,Rgb,我真的有麻烦了。我有一些原始rgb数据,从0到255的值,我想在iphone上以图像的形式显示它,但我不知道怎么做。有人能帮忙吗?我想我可能需要使用CGImageCreate,但就是不明白。我试着看了一下课堂参考资料,觉得自己被卡住了 我想要的只是一个10x10的灰度图像,它是通过一些计算生成的,如果有一种简单的方法来创建png或其他很棒的东西。在Mac OS上,你可以使用NSBitmapImageRep来完成。对于iOS来说,这似乎有点复杂。我发现了这篇博文: 用于为自己创建基于内存的位图。然

我真的有麻烦了。我有一些原始rgb数据,从0到255的值,我想在iphone上以图像的形式显示它,但我不知道怎么做。有人能帮忙吗?我想我可能需要使用CGImageCreate,但就是不明白。我试着看了一下课堂参考资料,觉得自己被卡住了


我想要的只是一个10x10的灰度图像,它是通过一些计算生成的,如果有一种简单的方法来创建png或其他很棒的东西。

在Mac OS上,你可以使用NSBitmapImageRep来完成。对于iOS来说,这似乎有点复杂。我发现了这篇博文:

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


我希望这足以让您开始学习。

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

const size\u t Width=10;
const size\u t Height=10;
const size\u t面积=宽度*高度;
常量大小\u t分量比例=4;//rgba
uint8_t像素数据[面积*分量像素];
//用可爱的不透明蓝色渐变填充像素:
用于(尺寸i=0;i
感谢您的快速回复!我会调查的。你能补充一些关于你的平台和哪种编程语言的细节吗?你提到CGImageCreate,你能包括一个url吗?你能提供一些你被卡住的细节吗?对于那些没有看到另一个问题的人来说:好吧,下面是:我正在使用Xcode和objective-c/coco为iOS编程。我被卡住了,因为我以前从未使用过任何石英或cgimage的东西,每个人都说哦,使用CGBitmapContextCreate等,但我真的需要一个简单的例子。另外,感谢链接,但我只是无法让它工作,并开始询问它将如何帮助我。我尝试打印出为未签名字符创建的数据,该字符用于生成一个uiimage,希望它是rgb数据,但我无法使其正确显示。这是在使用示例项目。当我把它放进我自己的页面时,它没有正确加载我的图像,只是拒绝记录任何内容。我找到了另一个看起来不错的页面,但我仍然没有得到它。我对这个很陌生。此外,我刚刚尝试从UIImage获取数据,但它只记录“PNG”。这是我的代码:UIImage*img=[UIImage imagename:@“img.png”];NSData*dataObj=UIImagePngResentation(img);NSString*aStr=[[NSString alloc]initWithData:dataObj编码:NSASCIIStringEncoding];NSLog(@“%@”,应科院);PNGRepresentation基本上是一种文件格式。那不是你想要的。(或者至少,在磁盘上创建PNG不同于创建图像。)这看起来就像我要找的。唯一的问题是我现在得到马赫-O误差:(我发布的程序没有问题。可能是一个新问题?哦,我解决了,谢谢!我不小心将CoreGraphics框架复制到了我的项目文件夹中。哎呀!它正在工作,但你介意简要解释一下我如何更改pixelData以获得我想要的显示吗?如果你不想感谢代码!
pixelData
是一个连续的rgba像素组件缓冲区-在C图形中非常常见。它的内存布局(单调递增)是RGBARGBA…您可以看到我如何通过设置示例中的
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! :)