gpt4 book ai didi

objective-c - 如何在Objective-C中将字节数组转换为图像

转载 作者:行者123 更新时间:2023-12-02 07:45:03 24 4
gpt4 key购买 nike

就是这种情况
我有一个未签名的char指针指向BMP图像数据
在我用指针循环后,我实现了一个包含int值0-255的字节数组

我想要的是将数组中的此值转换为BMP图像
在UIImage中显示它。

**图像为灰度

最佳答案

此代码段来自blog,我建议您在那里查看project site in Github

另请注意,此类方法适用于RGB8图像,因此您需要在bitsPerPixel(灰度应该为8),bytesPerRow(1 *宽度),bufferLength(删除* 4),并改为使用colorSpaceRef创建CGColorCreateGenericGray

我还注意到,使用CGColorCreateGenericGray创建色彩空间时假设您的数组具有alpha信息。因此,也许您应该为每个像素添加一个alpha字节,以使其正常工作。

+ (UIImage *) convertBitmapRGBA8ToUIImage:(unsigned char *) buffer 
withWidth:(int) width
withHeight:(int) height {


size_t bufferLength = width * height * 4;
CGDataProviderRef provider = CGDataProviderCreateWithData(NULL, buffer, bufferLength, NULL);
size_t bitsPerComponent = 8;
size_t bitsPerPixel = 32;
size_t bytesPerRow = 4 * width;

CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB();
if(colorSpaceRef == NULL) {
NSLog(@"Error allocating color space");
CGDataProviderRelease(provider);
return nil;
}

CGBitmapInfo bitmapInfo = kCGBitmapByteOrderDefault | kCGImageAlphaPremultipliedLast;
CGColorRenderingIntent renderingIntent = kCGRenderingIntentDefault;

CGImageRef iref = CGImageCreate(width,
height,
bitsPerComponent,
bitsPerPixel,
bytesPerRow,
colorSpaceRef,
bitmapInfo,
provider, // data provider
NULL, // decode
YES, // should interpolate
renderingIntent);

uint32_t* pixels = (uint32_t*)malloc(bufferLength);

if(pixels == NULL) {
NSLog(@"Error: Memory not allocated for bitmap");
CGDataProviderRelease(provider);
CGColorSpaceRelease(colorSpaceRef);
CGImageRelease(iref);
return nil;
}

CGContextRef context = CGBitmapContextCreate(pixels,
width,
height,
bitsPerComponent,
bytesPerRow,
colorSpaceRef,
bitmapInfo);

if(context == NULL) {
NSLog(@"Error context not created");
free(pixels);
}

UIImage *image = nil;
if(context) {

CGContextDrawImage(context, CGRectMake(0.0f, 0.0f, width, height), iref);

CGImageRef imageRef = CGBitmapContextCreateImage(context);

// Support both iPad 3.2 and iPhone 4 Retina displays with the correct scale
if([UIImage respondsToSelector:@selector(imageWithCGImage:scale:orientation:)]) {
float scale = [[UIScreen mainScreen] scale];
image = [UIImage imageWithCGImage:imageRef scale:scale orientation:UIImageOrientationUp];
} else {
image = [UIImage imageWithCGImage:imageRef];
}

CGImageRelease(imageRef);
CGContextRelease(context);
}

CGColorSpaceRelease(colorSpaceRef);
CGImageRelease(iref);
CGDataProviderRelease(provider);

if(pixels) {
free(pixels);
}
return image;
}

关于objective-c - 如何在Objective-C中将字节数组转换为图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7650144/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com