如何从无符号字符创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 :原始像素数据
- imageWidth , imageHeight :图片尺寸
- 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];