C# 设置图片透明度源码,支持16/24/32位色深
2017-08-09 11:54
1061 查看
源码:
找了张24位png测试
测试代码:
输出:
/// <summary> /// 设置图像透明度,若原图不为32位ARGB格式,则自动转换为32位ARGB输出 /// </summary> /// <param name="src">原图</param> /// <param name="transparency">透明度(0~1之间双精度浮点数)</param> public static unsafe void SetTransparent(ref Bitmap src, double transparency) { if (transparency < 0.0 || transparency > 1.0) throw new ArgumentOutOfRangeException("透明度必须为0~1之间的双精度浮点数"); BitmapData srcData; Rectangle rect; byte* p; rect = new Rectangle(0, 0, src.Width, src.Height); src = src.Clone(rect, PixelFormat.Format32bppArgb); //转换到32位,否则丢失透明度 srcData = src.LockBits(rect, ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb); //锁定字节数组到内存 p = (byte*)srcData.Scan0.ToPointer(); //获取字节数组在内存中地址 if (src.PixelFormat == PixelFormat.Format32bppArgb) { //如果是32位图片,有Alpha通道,以原Alpha通道的值为基准 p += 3; //默认修改Alpha通道的值 for (int i = 0; i < srcData.Stride * srcData.Height; i += 4) { *p = (byte)(*p * transparency); //原Alpha通道值*透明度 p += 4; } } else { //不是32位图片,无Alpha通道,以Alpha通道最大值255为基准 p += 3; //默认修改Alpha通道的值 for (int i = 0; i < srcData.Stride * srcData.Height; i += 4) { *p = (byte)(255 * transparency); //255*透明度 p += 4; } } src.UnlockBits(srcData); //解锁 }
找了张24位png测试
测试代码:
static void Main() { Bitmap src; src = new Bitmap("snipaste_20170808_190701.png"); SetTransparent(ref src, 0.5); src.Save("1.png", ImageFormat.Png); }
输出:
相关文章推荐
- C#给图片加水印,可设置透明度
- 黄聪:C#给图片加水印标记,可设置透明度
- PHP图片加水印类,支持文字水印、透明度设置、自定义水印类
- C#给图片加水印,可设置透明度
- C# 第三方DLL,可以实现PDF转图片,支持32位系统、64位系统
- C#给图片加水印,可设置透明度
- [c#源码]微风IM V3.1 支持TCP通信发送图片
- C#给图片加水印标记,可设置透明度
- C#给图片加水印标记(可设置透明度)比上一篇好点,但只有一个方法
- C#给图片加水印,可设置透明度
- C#给图片加水印标记,可设置透明度
- 一种简洁的为图片设置Logo的算法,支持透明度选项
- 黄聪:C# 图片识别(支持21种语言)(转)
- 154在屏幕中绘图时设置透明度(扩展知识:为图片视图添加点击手势识别器,来实现点击事件操作)
- 关于设置背景图片的透明度(html+css)
- VC下2、4、8、16、24、32位位图的数据解析与显示
- C# 实现的 批量彩色图片转黑白图片的小工具 (附源码)
- CSS设置div透明度;FireFox 3.5+ 已不再支持 -moz-opacity
- C#学习笔记:动态设置控件的背景图片
- 用于验证码图片识别的类(C#源码)