2023年6月21日发(作者:)
图像处理(ImageProcessing)----------图像透明度(C#实现) 讲到透明,可以先说⼏种常见的彩⾊图像深度标准:1. 8位⾊,每个像素所能显⽰的彩⾊数为2的8次⽅,即256种颜⾊。2. 16位增强⾊,16位彩⾊,每个像素所能显⽰的彩⾊数为2的16次⽅,即65536种颜⾊。3. 24位真彩⾊,每个像素所能显⽰的彩⾊数为24位,即2的24次⽅,约1680万种颜⾊。4. 32位真彩⾊,即在24位真彩⾊图像的基础上再增加⼀个8位表⽰图像256级透明度的Alpha通道。当然也可以随意配⽐,⽐如16位,5位R、5位G、5位B,还有1位为Alpha通道,这样就只有透明或者不透明两种情况。图像的透明度是相对的,即⼀张图的透明程度是与另⼀张图作为对照的结果。通常我们使⽤电脑⼯具看到的图像透明都是以背景为对照的。其原理就是,两张图叠加,A为前景图,B为背景图。此时透明度为alpha,那么A图RGB分量占⽐alpha,B图RGB分量占⽐(1-alpha),两者之和即为新图的RGB分量,也就是我们看到的透明图,这⾥前后景是按100%分配当然你也可以按256分配,把握好⽐例就⾏: R(C)=(1-alpha)*R(B)+alpha*R(A)
G(C)=(1-alpha)*G(B)+alpha*G(A)
B(C)=(1-alpha)*B(B)+alpha*B(A)
C#代码实现: //图像透明度 public Bitmap alphaImage(Bitmap fImage,Bitmap bImage,double alpha) { //输⼊fImage为前景图,bImage为背景图,alpha为透明度 int height = ; int width = ; Bitmap aImage = new Bitmap(width, height, 24bppRgb); for (int y = 0; y < height; y++) { for(int x = 0; x < width; x++) { int Ra = (int)((1 - (alpha / 100.0)) * el(x, y).R + (alpha / 100.0) * el(x, y).R); int Ga = (int)((1 - (alpha / 100.0)) * el(x, y).G + (alpha / 100.0) * el(x, y).G); int Ba = (int)((1 - (alpha / 100.0)) * el(x, y).B + (alpha / 100.0) * el(x, y).B); Color RGB = gb(Ra, Ga, Ba); el(x, y, RGB); } } return aImage; }
2023年6月21日发(作者:)
图像处理(ImageProcessing)----------图像透明度(C#实现) 讲到透明,可以先说⼏种常见的彩⾊图像深度标准:1. 8位⾊,每个像素所能显⽰的彩⾊数为2的8次⽅,即256种颜⾊。2. 16位增强⾊,16位彩⾊,每个像素所能显⽰的彩⾊数为2的16次⽅,即65536种颜⾊。3. 24位真彩⾊,每个像素所能显⽰的彩⾊数为24位,即2的24次⽅,约1680万种颜⾊。4. 32位真彩⾊,即在24位真彩⾊图像的基础上再增加⼀个8位表⽰图像256级透明度的Alpha通道。当然也可以随意配⽐,⽐如16位,5位R、5位G、5位B,还有1位为Alpha通道,这样就只有透明或者不透明两种情况。图像的透明度是相对的,即⼀张图的透明程度是与另⼀张图作为对照的结果。通常我们使⽤电脑⼯具看到的图像透明都是以背景为对照的。其原理就是,两张图叠加,A为前景图,B为背景图。此时透明度为alpha,那么A图RGB分量占⽐alpha,B图RGB分量占⽐(1-alpha),两者之和即为新图的RGB分量,也就是我们看到的透明图,这⾥前后景是按100%分配当然你也可以按256分配,把握好⽐例就⾏: R(C)=(1-alpha)*R(B)+alpha*R(A)
G(C)=(1-alpha)*G(B)+alpha*G(A)
B(C)=(1-alpha)*B(B)+alpha*B(A)
C#代码实现: //图像透明度 public Bitmap alphaImage(Bitmap fImage,Bitmap bImage,double alpha) { //输⼊fImage为前景图,bImage为背景图,alpha为透明度 int height = ; int width = ; Bitmap aImage = new Bitmap(width, height, 24bppRgb); for (int y = 0; y < height; y++) { for(int x = 0; x < width; x++) { int Ra = (int)((1 - (alpha / 100.0)) * el(x, y).R + (alpha / 100.0) * el(x, y).R); int Ga = (int)((1 - (alpha / 100.0)) * el(x, y).G + (alpha / 100.0) * el(x, y).G); int Ba = (int)((1 - (alpha / 100.0)) * el(x, y).B + (alpha / 100.0) * el(x, y).B); Color RGB = gb(Ra, Ga, Ba); el(x, y, RGB); } } return aImage; }
发布评论