在将图像转换为2D阵列时需要校正,反之亦然

时间:2012-09-28 10:53:30

标签: ios image-processing core-graphics

我正在尝试从UIImage制作一个2D像素阵列,在制作完该阵列后,我将其转换回UIImage以查看2D Pixel阵列数据是否正确。 http://i.imgur.com/VsCw3.png此链接有两张图片。在将像素数据转换回UIImage之后获得底部1。 Top One是原始图像。两者看起来完全相似,但是当您放大时,您会看到应该在图像的最后一列上的像素显示在第一列上,但其余数据是准确的。

enter image description here    //从2D像素阵列获得的图像(第一列数据不准确)

enter image description here    //实际图像

下面是我用来将UIImage转换为像素的代码,反之亦然。我可以找出我做错了什么。请帮我解决这个问题。

//将UIimage转换为二维像素矩阵的代码

   CGImageRef inImage = sourceImage.CGImage;
   GContextRef cgctx = [self createARGBBitmapContextFromImage:inImage];

//if (cgctx == NULL) { return nil; /* error */ }
    size_t w = CGImageGetWidth(inImage);
    size_t h = CGImageGetHeight(inImage);
    CGRect rect = {{0,0},{w,h}}; 
    unsigned char* data = CGBitmapContextGetData (cgctx);   
    if (data != NULL) {
    // separate out the rgb values of each pixel in each matrix
    for(int y=0;y<h;y++)
    {
        for(int x=0;x<w;x++)
        {
            int offset = 4*((w*y)+x);
            int alpha =  data[offset]; 
            int red = data[offset+1]; 
            int green = data[offset+2]; 
            int blue = data[offset+3]; 

            sourceRedMatrix[x][y] = red;
            sourceGreenMatrix[x][y] = green;
            sourceBlueMatrix[x][y] = blue;
           // sourceAlphaMatrix[x][y] = alpha;
        }
    }
    CGContextRelease(cgctx); 
 if (data) 
{
    free(data);
}

//从二维像素矩阵中获取UIImage的代码

for(int y=0;y<h;y++)
{
    for(int x=0;x<w;x++)
    {
         redSourceColor = sourceRedMatrix[x][y];
            greenSourceColor = sourceGreenMatrix[x][y];
            blueSourceColor = sourceBlueMatrix[x][y];                
            rawDataSource[byteIndex] = (char) (255);   // alpha =255, deliberately set
        rawDataSource[byteIndex+1] = (char) (redSourceColor);
        rawDataSource[byteIndex+2] = (char) (greenSourceColor);
        rawDataSource[byteIndex+3] = (char) (blueSourceColor);
        byteIndexSource += 4;
    }
 }CGContextRef ctx = CGBitmapContextCreate(rawData,w, h, 8, 4 * w, CGColorSpaceCreateDeviceRGB(), kCGImageAlphaPremultipliedFirst);
  inImage = CGBitmapContextCreateImage (ctx);
UIImage* updatedSourceImage = [UIImage imageWithCGImage:inImage];  
imageView.image = updatedSourceImage;
free(rawData);
free(sourceRedMatrix);*

0 个答案:

没有答案