【C#/WPF】图像数据格式转换时,透明度丢失的问题
2017-03-29 14:59
531 查看
问题:工作中涉及到图像的数据类型转换,经常转着转着发现,到了哪一步图像的透明度丢失了!
例如,Bitmap转BitmapImage的经典代码如下:
使用时发现,如果一张图片四周是透明的,那么转出来的BitmapImage图像四周透明部分会被自动填充为黑色的!解决办法在于修改Bitmap保存时选择的格式,把Bmp改为Png即可。
同样,类似的经验教训还有如下,在图片数据格式转换时,常常要注意是否保留有α通道透明度数据,
比如在ImageSource转为System.Drawing.Bitmap的方法:
要非常细心,看清楚选择的格式
例如,Bitmap转BitmapImage的经典代码如下:
public static BitmapImage BitmapToBitmapImage(System.Drawing.Bitmap bitmap) { using (MemoryStream stream = new MemoryStream()) { bitmap.Save(stream, ImageFormat.Bmp); stream.Position = 0; BitmapImage result = new BitmapImage(); result.BeginInit(); // According to MSDN, "The default OnDemand cache option retains access to the stream until the image is needed." // Force the bitmap to load right now so we can dispose the stream. result.CacheOption = BitmapCacheOption.OnLoad; result.StreamSource = stream; result.EndInit(); result.Freeze(); return result; } }
使用时发现,如果一张图片四周是透明的,那么转出来的BitmapImage图像四周透明部分会被自动填充为黑色的!解决办法在于修改Bitmap保存时选择的格式,把Bmp改为Png即可。
bitmap.Save(stream, ImageFormat.Png);
同样,类似的经验教训还有如下,在图片数据格式转换时,常常要注意是否保留有α通道透明度数据,
比如在ImageSource转为System.Drawing.Bitmap的方法:
public static System.Drawing.Bitmap ImageSourceToBitmap(ImageSource imageSource) { BitmapSource m = (BitmapSource)imageSource; System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(m.PixelWidth, m.PixelHeight, System.Drawing.Imaging.PixelFormat.Format32bppPArgb); System.Drawing.Imaging.BitmapData data = bmp.LockBits( new System.Drawing.Rectangle(System.Drawing.Point.Empty, bmp.Size), System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format32bppPArgb); m.CopyPixels(Int32Rect.Empty, data.Scan0, data.Height * data.Stride, data.Stride); bmp.UnlockBits(data); return bmp; }
要非常细心,看清楚选择的格式
System.Drawing.Imaging.PixelFormat.Format32bppPArgb; // 带有α通道的 System.Drawing.Imaging.PixelFormat.Format32bppRgb; // 不带α通道的
相关文章推荐
- fmri数据分析图像格式及转换问题——基于spm讨论
- C#中日期类型数据的转换格式
- C#中获取的SQL日期精度丢失毫秒的处理--SQL日期格式转换
- FAT 格式 转换为 NTFS 不丢失数据
- C# 动态创建数组,并且保持以前的数据不丢失的问题
- ASP.NET(C#)Excel导入Dataset的出现数据值丢失问题
- 用Ghostscript API将PDF格式转换为图像格式(C#)
- C# 读取EXCEL文件出现数据丢失问题
- 带格式的xml数据直接转换成Dataset的问题
- 如何:将图像从一种格式转换为另一种格式 C#
- C#的JSON数据格式转换方法
- C#基础数据类型与字节数组(内存中的数据格式)相互转换(BitConverter 类)
- 关于C#数据类型之间转换的问题!
- C#数据格式转换方法详解
- 【原创】c#讲数据库数据转换为json格式(使用extjs,easyui中的datagrid)
- OpenCV中IplImage图像格式与BYTE图像数据的转换
- 关于C#数据类型之间转换的问题
- 转:OpenCV中IplImage图像格式与 BYTE图像数据的转换
- UDP 协议 C# UdpClient乱序接收数据包丢失的问题 Socket ReceiveBufferSize
- C#读取excel文件数据丢失问题