【发布时间】:2014-08-14 06:30:58
【问题描述】:
我得到一个图像,但我丢失了 1 个字节。 我生成的图像:
我想使用 argb raw (void*)data 创建颜色/rgba 位图,并且我有它的宽度和高度。在后端(c++)中,我使用以下方法将rgb解码为argb,然后将输入为(void*)pData,
void decode_rgb_to_argb(U8Data r, U8Data g, U8Data b, U32Data argb, u_int elements)
{
assert(argb);
assert(r);
assert(g);
assert(b);
assert(elements);
unsigned char*p=NULL;
for(u_int i=0;i<elements;i++)
{
p=(unsigned char*)(argb+i);
*p=b[i];
p++;
*p=g[i];
p++;
*p=r[i];
p++;
*p=0;
}
}
pData = decode_rgb_to_argb;
//I am handling in ios
-(uiimage*) createBitmap:(void*)pData pWidth:(u_int)pWidth pHeight:(u_int)pHeight{
// Here i want to write ppm file using pData to check wether 4byte/3byte.
NSData* data = [NSData dataWithBytes:pData length:pWidth*pHeight];
char* myBuffer = (char*)pData;
char* rgba = (char*)malloc(pWidth*pHeight*4);
for(int i=0; i < pWidth*pHeight; i++) {
rgba[4*i] = myBuffer[3*i];
rgba[4*i+1] = myBuffer[3*i+1];
rgba[4*i+2] = myBuffer[3*i+2];
rgba[4*i+3] = 255; //or 0
}
size_t bitsPerComponent = 8;
size_t bytesPerRow = pWidth*4;
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef bitmapContext = CGBitmapContextCreate(
// Here i have given my raw data(pData) and rgba buffer
(u_char*)pData,
pWidth,
pHeight,
bitsPerComponent,
bytesPerRow,
colorSpace,
//Here i have used kCGImageAlphaFirst because i am getting data as ARGB,but
//bitmap is not creating.If i use kCGImageAlphaNoneSkipLast, i am getting expected
//image but i'm loosing one byte(alpha).
kCGImageAlhaInfo
);
CFRelease(colorSpace);
CGImageRef cgImage = CGBitmapContextCreateImage(bitmapContext);
UIImage *result = [[[UIImage imageWithCGImage:cgImage] retain] autorelease];
CGColorSpaceRelease(colorSpace);
CGImageRelease(cgImage);
CGContextRelease(bitmapContext);
return result;
}
如何编写 ppm 文件以及如何在 ios 中创建从原始(void*)Pdata 到彩色图像的位图?
【问题讨论】:
-
您面临的具体问题是什么?
-
我在结果图像中丢失了 1 个字节。
-
没看到图片
-
@baskar: 图像可见.. 我有 (void*)pData 格式的 rgba 颜色...如何读取和写入 ppm 文件。
-
我已经找到了这个问题的解决方案,感谢您的回答和 cmets
标签: ios objective-c bitmap cgcontext rgba