2010-05-13 45 views
1

我想创建与颜色信息的CGImage我已经有转换位图图像信息转换成CGImage在iPhone OS 3

下面是用于将CGImage到CML的代码,CML_color是矩阵结构

- (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中的图像,但我该怎么做?

回答

3

周围的Googling后,我终于想通了如何做到这一点我自己

下面是代码:

- (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; 
} 
+0

你可以不用中间CGBitmapContext,这将是更有效,因为CGBitmapContextCreateImage复制像素。 – drawnonward 2010-05-14 17:51:48