我有一个导致标准bmp位流的gdi引擎,现在我想通过iphone中的CG显示它,我这样使用它:
// size -> image size
// rect -> current view rect
// pBits -> the BITMAPINFO image bits stream
long imgSizePerRow = ((long)(24 * size.width + 31) / 32) * 4;
CGDataProviderRef providerRef = CGDataProviderCreateWithData(NULL, pBits,
imgSizePerRow * size.height, NULL);
CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB();
CGImageRef imageRef = CGImageCreate(size.width, size.height, 8, 24,
imgSizePerRow, colorSpaceRef,
kCGBitmapByteOrderDefault, providerRef,
NULL, YES, kCGRenderingIntentDefault);
CGContextDrawImage(context, rect, imageRef);
CGImageRelease(imageRef);
CGColorSpaceRelease(colorSpaceRef);
CGDataProviderRelease(providerRef);
注意:我检查行像素是否符合4的时间
我的gdi生成比特流,在这种情况下,R8G8B8格式,没有alpha通道,我将它用于CGDataProviderRef并将CGImage绘制到我的视图中。 奇怪的是,图像的颜色似乎发生了变化,但整个形状看起来还不错,我之前通过BITMAP FORMAT将比特流保存到文件中,然后进行对比,一切看起来都不错,只是整个颜色空间。
任何人都可以告诉我代码中的错误在哪里,或者我错过了一些段落。设置?
答案 0 :(得分:3)
CGImageCreate采用原始像素,而.bmp文件不是(它具有“BITMAPINFO”标题)。相反,使用.bmp数据创建一个UIImage,然后从该对象获取CGImage。
答案 1 :(得分:1)
我错过了重点:我的GDI位图流按B8-> G8-> R8排序。