您的位置:首页 > 移动开发 > IOS开发

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

2016-03-20 22:25 399 查看
从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();

CGContextRef
ctx =

CGBitmapContextCreate(subsetData, sourceWidth, sourceHeight,

8, subsetBytesPerRow, grayColorSpace,

kCGImageAlphaNone);

CGColorSpaceRelease(grayColorSpace);

CGContextSetInterpolationQuality(ctx, kCGInterpolationNone);

CGContextSetAllowsAntialiasing(ctx, false);

// adjust
the coordinate system

CGContextTranslateCTM(ctx, 0.0, sourceHeight);

CGContextScaleCTM(ctx, 1.0, -1.0);

UIGraphicsPushContext(ctx);

//CGRect
rect = CGRectMake(0,0,sourceWidth,sourceHeight);

//[image
drawInRect:rect];

UIGraphicsPopContext();

CGContextFlush(ctx);

CGImageRef subsetImageRef = CGBitmapContextCreateImage(ctx);

UIImage*
subsetImage =[UIImage imageWithCGImage:subsetImageRef];

CGImageRelease(subsetImageRef);

CGContextRelease(ctx);

return
subsetImage;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: