如何从无符号字符创build图像*

我正在尝试从unsigned char *中的原始数据创build一个新的图像。 我从存储的数据中获得每像素的位数。 我试图将原始数据转换成NSData,但结果图像是零,

unsigned char * bitmap = myData;

NSUInteger myImageDataLength = strlen((const char *)bitmap);

NSData * d = [NSData dataWithBytes:bitmap length:myImageDataLength];

imgView.image = [UIImage imageWithData:d];

然后我尝试使用上下文创build一个图像,如下所示:

CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceRGB(); int width = mWidth; int height = mHeight; size_t bpp = mBpp; size_t bpc = 8; size_t bpr = (width * 4); CGContextRef context = CGBitmapContextCreate(bitmap, width, height, 8, bpr, colorspace, kCGImageAlphaNone); CGImageRef cgImage = nil; if (context != nil) { cgImage = CGBitmapContextCreateImage (context); CGContextRelease(context); } CGColorSpaceRelease(colorspace); UIImage *newImage = [UIImage imageWithCGImage:cgImage]; 

我得到一个错误消息,如<Error>: CGBitmapContextCreate: unsupported parameter combination: 8 integer bits/component; 24 bits/pixel; 3-component color space; kCGImageAlphaNone; 64 bytes/row. <Error>: CGBitmapContextCreate: unsupported parameter combination: 8 integer bits/component; 24 bits/pixel; 3-component color space; kCGImageAlphaNone; 64 bytes/row.

我试图通过设置很多值来解决它,但无法find任何结果。 我search了互联网寻找这个解决scheme,但所有其他人正在创build一个图像从现有的图像,以便他们得到每个组件和所有的位数值…我怎样才能从这个数据创build图像?

原始图像:

在这里输入图像说明

产生的图像:

在这里输入图像说明

产生的图像应该被扭曲。 (像FatBooth和其他应用程序一样翘曲)

下面的代码假设你有以下代码,从原始像素数据创build一个UIImage实例:

  • pixelData :原始像素数据
  • imageWidthimageHeight :图片尺寸
  • scanWidth :每条扫描线的字节数
  • bytesPerPixel :每个像素使用的字节数,通常为4

生成的UIImage被分配给variablesuiImage

 CGDataProviderRef provider = CGDataProviderCreateWithData( NULL, pixelData, imageHeight * scanWidth, NULL); CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB(); CGBitmapInfo bitmapInfo = kCGBitmapByteOrderDefault; CGColorRenderingIntent renderingIntent = kCGRenderingIntentDefault; CGImageRef imageRef = CGImageCreate(imageWidth, imageHeight, 8, bytesPerPixel * 8, scanWidth, colorSpaceRef, bitmapInfo, provider, NULL, NO, renderingIntent); UIImage *uiImage = [UIImage imageWithCGImage:imageRef]; CGColorSpaceRelease(colorSpaceRef); CGImageRelease(imageRef); 

尝试这个 :-

 CGRect screenBounds = [[UIScreen mainScreen] bounds]; GLuint *buffer; //point the buffer to memory location code that here accordingly int backingWidth = screenBounds.size.width; int backingHeight =screenBounds.size.height; NSInteger myDataLength = backingWidth * backingHeight * 4; CGDataProviderRef provider = CGDataProviderCreateWithData(NULL, buffer, myDataLength, releaseScreenshotData); const int bitsPerComponent = 8; const int bitsPerPixel = 4 * bitsPerComponent; const int bytesPerRow = 4 * backingWidth; CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB(); CGBitmapInfo bitmapInfo = kCGBitmapByteOrderDefault; CGColorRenderingIntent renderingIntent = kCGRenderingIntentDefault; CGImageRef imageRef = CGImageCreate(backingWidth,backingHeight, bitsPerComponent, bitsPerPixel, bytesPerRow, colorSpaceRef, bitmapInfo, provider, NULL, NO, renderingIntent); CGColorSpaceRelease(colorSpaceRef); CGDataProviderRelease(provider); UIImage *myImage = [UIImage imageWithCGImage:imageRef]; CGImageRelease(imageRef); [uiimageviewobject setImage:myImage]; [self addSubview:uiimageviewobject];