IOS按坐标逐点绘制灰度图片

来源:互联网 发布:34970a数据采集器 编辑:程序博客网 时间:2024/05/08 20:46
从zxing的源代码里边挖出来的部分源码,根据自己的需要修改成这个样子……基于objectiv-C++,这么看彩色的应该差不多,有空再研究下
***************************************************************************************************
//首先生成图像矩阵,一维矩阵,长度=目标图像长*目标图像宽,数据类型可以是byte或者usignedchar
Byte* subsetData =publicFunction::init1DArrayByte(sourceWidth*sourceHeight);
for(int x = 0; x
       for (int y = 0 ; y < sourceHeight; y++) {
           Color c = getColorAt(x, y);//我自己预设好的矩阵,这里可以自由发挥
           if (c.R>127&&c.G>127&&c.B>127)
           {
               subsetData[x+y*sourceWidth] = 0;//表示修改第(x,y)处的点的灰度为0
           }
           else
           {
               subsetData[x+y*sourceWidth] = 255;
           }
       }
//循环每一个像素点,0表示灰度0,255表示灰度255
//**********************************
//以下开始将图像矩阵保存成UIImage
int subsetBytesPerRow = sourceWidth;//((sourceWidth + 0xf) >>4) << 4;
   CGColorSpaceRef grayColorSpace =CGColorSpaceCreateDeviceGray();
    CGContextRefctx =
   CGBitmapContextCreate(subsetData, sourceWidth, sourceHeight,
                         8, subsetBytesPerRow, grayColorSpace,
                         kCGImageAlphaNone);
   CGColorSpaceRelease(grayColorSpace);
   CGContextSetInterpolationQuality(ctx, kCGInterpolationNone);
   CGContextSetAllowsAntialiasing(ctx, false);
    // adjustthe coordinate system
   CGContextTranslateCTM(ctx, 0.0, sourceHeight);
   CGContextScaleCTM(ctx, 1.0, -1.0);
   
   UIGraphicsPushContext(ctx);
    //CGRectrect = CGRectMake(0,0,sourceWidth,sourceHeight);
   
    //[imagedrawInRect:rect];
   UIGraphicsPopContext();
     CGContextFlush(ctx);
     CGImageRef subsetImageRef = CGBitmapContextCreateImage(ctx);
    UIImage*subsetImage =[UIImage imageWithCGImage:subsetImageRef];
   CGImageRelease(subsetImageRef);
   
   CGContextRelease(ctx);

    returnsubsetImage;
0 0
原创粉丝点击