本文介绍了在iPhone OS 3中将位图图像信息转换为CGImage的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想用已有的颜色信息创建一个CGImage
I want to create a CGImage with the color information I already have
这是将CGImage转换为CML的代码,CML_color是矩阵结构
Here is the code for converting the CGImage to CML, CML_color is a matrix structure
- (void)CGImageReftoCML:(CGImageRef)image destination:(CML_color &)dest{
CML_RGBA p;
NSUInteger width=CGImageGetWidth(image);
NSUInteger height=CGImageGetHeight(image);
CGColorSpaceRef colorSpace=CGColorSpaceCreateDeviceRGB();
unsigned char *rawData=(unsigned char*)malloc(height*width*4);
NSUInteger bytesPerPixel=4;
NSUInteger bytesPerRow=bytesPerPixel*width;
NSUInteger bitsPerComponent=8;
CGContextRef context=CGBitmapContextCreate(rawData, width, height, bitsPerComponent, bytesPerRow, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
CGColorSpaceRelease(colorSpace);
CGContextDrawImage(context, CGRectMake(0, 0, width, height), image);
CGContextRelease(context);
int index=0;
for (int i=0; i<height; i++) {
for (int j=0; j<width; j++) {
p.red=rawData[index++];
p.green=rawData[index++];
p.blue=rawData[index++];
p.alpha=rawData[index++];
dest(i,j)=p;
}
}
delete[] rawData;
}
现在我想要反向函数,它将CML转换为CGImage.我知道创建图像的所有颜色和Alpha信息,这些信息存储在矩阵CML中,但是我该怎么做?
Now I want the reverse function, which converts CML into CGImage. I know all the color and alpha information to create the image, which stored in the matrix CML, but how can I do that?
推荐答案
在谷歌搜索之后,我终于想出了自己的方法
After Googling around I finally figured out how to do this myself
这是代码:
- (CGImageRef)CMLtoCGImage:(CML_color &)source{
int imageWidth=source.Width();
int imageHeight=source.Height();
char* rgba=(char*)malloc(imageWidth*imageHeight*4);
for (int i=0; i<imageHeight; i++) {
for (int j=0; j<imageWidth; j++) {
rgba[4*(i*imageWidth+j)]=source(i,j).red;
rgba[4*(i*imageWidth+j)+1]=source(i,j).green;
rgba[4*(i*imageWidth+j)+2]=source(i,j).blue;
rgba[4*(i*imageWidth+j)+3]=source(i,j).alpha;
}
}
CGColorSpaceRef colorSpace=CGColorSpaceCreateDeviceRGB();
CGContextRef bitmapContext=CGBitmapContextCreate(rgba, imageWidth, imageHeight, 8, 4*imageWidth, colorSpace, kCGImageAlphaNoneSkipLast);
CFRelease(colorSpace);
CGImageRef cgImage=CGBitmapContextCreateImage(bitmapContext);
free(rgba);
return cgImage;
}
这篇关于在iPhone OS 3中将位图图像信息转换为CGImage的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!