我创建了一个函数,允许上传的透明.png文件插入到sql Server数据库中,并通过HttpHandler显示在网页上.
虽然这一切都有效,但是当在网页上查看时,png透明度会变为黑色.有没有办法保持透明度?
这是我从MVC控制器插入数据库的图像服务:
public void AddImage(int productId,string caption,byte[] bytesOriginal) { string jpgpattern = ".jpg|.JPG"; string pngpattern = ".png|.PNG"; string pattern = jpgpattern; ImageFormat imgFormat = ImageFormat.Jpeg; if (caption.ToLower().EndsWith(".png")) { imgFormat = ImageFormat.Png; pattern = pngpattern; } Productimage productimage = new Productimage(); productimage.ProductId = productId; productimage.BytesOriginal = bytesOriginal; productimage.BytesFull = Helpers.ResizeImageFile(bytesOriginal,600,imgFormat); productimage.BytesPoster = Helpers.ResizeImageFile(bytesOriginal,198,imgFormat); productimage.BytesThumb = Helpers.ResizeImageFile(bytesOriginal,100,imgFormat); productimage.Caption = Common.RegexReplace(caption,pattern,""); productimageDao.Insert(productimage); }
这是“ResizeImageFile”辅助函数:
public static byte[] ResizeImageFile(byte[] imageFile,int targetSize,ImageFormat imageFormat) { using (System.Drawing.Image oldImage = System.Drawing.Image.FromStream(new MemoryStream(imageFile))) { Size newSize = CalculateDimensions(oldImage.Size,targetSize); using (Bitmap newImage = new Bitmap(newSize.Width,newSize.Height,PixelFormat.Format24bppRgb)) { using (Graphics canvas = Graphics.FromImage(newImage)) { canvas.SmoothingMode = SmoothingMode.AntiAlias; canvas.InterpolationMode = InterpolationMode.HighQualityBicubic; canvas.PixelOffsetMode = PixelOffsetMode.HighQuality; canvas.DrawImage(oldImage,new Rectangle(new Point(0,0),newSize)); MemoryStream m = new MemoryStream(); newImage.Save(m,imageFormat); return m.GetBuffer(); } } } }
为保持png透明度,我需要做些什么?请举例说明.我真的不是图像处理方面的专家.
谢谢.
解决方法
也许尝试将像素格式从PixelFormat.Format24bppRgb更改为PixelFormat.Format32bppRgb.您需要额外的8位来保存Alpha通道.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。