C# 设置图片透明度源码,支持16/24/32位色深
来源:互联网 发布:js 去除disabled 编辑:程序博客网 时间:2024/06/05 21:17
源码:
/// <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);}
输出:
阅读全文
1 0
- C# 设置图片透明度源码,支持16/24/32位色深
- CSS 设置图片透明度
- 设置图片的透明度
- android设置图片透明度
- 设置图片透明度
- 给图片设置透明度。
- BitMap设置图片透明度
- c#改变图片透明度
- C#给图片加水印,可设置透明度
- C#给图片加水印,可设置透明度
- C#给图片加水印,可设置透明度
- 设置图片透明度alpha注意
- CSS设置网页图片透明度
- css如何设置图片透明度
- css图片透明度设置问题
- 一种简洁的为图片设置Logo的算法,支持透明度选项
- CSS图片透明度设置及层定位
- 给文字、图片设置透明度(简单)
- decod函数的用法
- 前端表单验证常用的正则表达式
- Pycharm新建模板默认添加个人信息
- 为什么多线程线程处理数据经常出现singnal异常,寻址异常
- aspectj通知
- C# 设置图片透明度源码,支持16/24/32位色深
- 移动的上下左右滑动
- java ip地址相关操作
- Ubuntu下编译C程序的详解
- javascript学习(十四)— 面向对象编程
- php文件操作技巧FileSystem
- jessite 三
- OGG安装及进程理解
- Xamarin.Forms 用户界面——动画