1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 制作电子名片(去除图片的白色背景)

制作电子名片(去除图片的白色背景)

时间:2019-05-01 14:36:19

相关推荐

制作电子名片(去除图片的白色背景)

//去除图片的白色背景

-(UIImage*)imageBlackToTransparent:(UIImage*)imagewithRed:(CGFloat)redandGreen:(CGFloat)greenandBlue:(CGFloat)bluewithEdge:(int)value{

//分配内存

constintimageWidth=image.size.width;

constintimageHeight=image.size.height;

size_tbytesPerRow=imageWidth*4;

//创建context

uint32_t*rgbImageBuf=(uint32_t*)malloc(bytesPerRow*imageHeight);

CGColorSpaceRefcolorSpace=CGColorSpaceCreateDeviceRGB();

CGContextRefcontext=CGBitmapContextCreate(rgbImageBuf,imageWidth,imageHeight,8,bytesPerRow,colorSpace,

kCGBitmapByteOrder32Little|kCGImageAlphaNoneSkipLast);

CGContextDrawImage(context,CGRectMake(0,0,imageWidth,imageHeight),image.CGImage);

//遍历像素

intpixelNum=imageWidth*imageHeight;

uint32_t*pCurPtr=rgbImageBuf;

for(inti=0;i<pixelNum;i++,pCurPtr++){

if((*pCurPtr&0xFFFFFF00)<value)//将白色变成透明

{

//改成下面的代码,会将图片转成想要的颜色

uint8_t*ptr=(uint8_t*)pCurPtr;

ptr[3]=red;//0~255

ptr[2]=green;

ptr[1]=blue;

}

else

{

//变透明

uint8_t*ptr=(uint8_t*)pCurPtr;

ptr[0]=0;

}

}

//输出图片

CGDataProviderRefdataProvider=CGDataProviderCreateWithData(NULL,rgbImageBuf,bytesPerRow*imageHeight,ProviderReleaseData);

CGImageRefimageRef=CGImageCreate(imageWidth,imageHeight,8,32,bytesPerRow,colorSpace,

kCGImageAlphaLast|kCGBitmapByteOrder32Little,dataProvider,

NULL,true,kCGRenderingIntentDefault);

CGDataProviderRelease(dataProvider);

UIImage*resultUIImage=[UIImageimageWithCGImage:imageRef];

//清理空间

CGImageRelease(imageRef);

CGContextRelease(context);

CGColorSpaceRelease(colorSpace);

returnresultUIImage;

}

复制代码

网上还有其他解决办法尝试之后貌似没有效果,可能是我操作失误,知道原因希望指出,只是个人的一个记录知识点

for(inti=0;i<pixelNum;i++,pCurPtr++){

//接近白色

//将像素点转成子节数组来表示---ARGB

//ptr[0]:透明度,ptr[1]:R,ptr[2]:G,ptr[3]:B

//分别取出RGB值后。进行判断需不需要设成透明。

uint8_t*ptr=(uint8_t*)pCurPtr;

if(ptr[1]>140&&ptr[2]>140&&ptr[3]>140){

//当RGB值都大于140则比较接近白色的都将透明度设为0

//demo中的图片有点灰,所以设置了140,可以根据需要自行设置

ptr[0]=0;

}

}

复制代码

其他地方都一样,不同的地方就是判断的临界值~

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。