C# 水晶报表中base64还原图片保存在数据集中在界面显示(图片黑底问题)
最近在水晶报表中遇到获取base64图片数据流,保存到数据集中,从数据集中进行显示图片黑底,但用pictureBox1显示图片就正常,为什么呢?原因如下图:
于是,我将图像转白底竟然就好了,代码如下:
1、base64数据流如下(已去调data:image/gif;base64,若在在线工具中测试需在串前加data:image/gif;base64,):
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
2、在数据集中新建sample_auditor字段,并设置为System.Byte[]类型,
C1Json.data.detail_info.sample_auditor_img值为base64数据流
rows["sample_auditor"] = BitmapToGrayByte(Base64ToImage(C1Json.data.detail_info.sample_auditor_img));
/// <summary> /// 将bitmap类型转byte[] /// </summary> /// <param name="bitmap"></param> /// <returns></returns> public static byte[] BitmapToGrayByte(Bitmap bitmap) { byte[] bytes = null; try { Bitmap b = new Bitmap(bitmap); MemoryStream ms = new MemoryStream(); b.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp); bytes = ms.GetBuffer(); //byte[] bytes= ms.ToArray(); 这两句都可以,至于区别么,下面有解释 ms.Close(); } catch (Exception ex) { LogWrite.AddLgoToTXT("BitmapToGrayByte异常错误:" + ex.Message); } return bytes; }
/// <summary> /// 将base64图片加密转Image /// </summary> /// <param name="base64"></param> public Bitmap Base64ToImage(string base64) { Bitmap bp = null; Bitmap bitmap = null; try { base64 = base64.Replace("data:image/png;base64,", "").Replace("data:image/jgp;base64,", "").Replace("data:image/jpg;base64,", "").Replace("data:image/jpeg;base64,", "");//将base64头部信息替换 byte[] bytes = Convert.FromBase64String(base64); MemoryStream memStream = new MemoryStream(bytes); Image mImage = Image.FromStream(memStream); #region 创建具有白色背景的位图 bitmap = new Bitmap(mImage.Width, mImage.Height); using (Graphics graphics = Graphics.FromImage(bitmap)) { graphics.Clear(Color.White); graphics.DrawImage(mImage, 0, 0, mImage.Width, mImage.Height); } #endregion } catch (Exception ex) { LogWrite.AddLgoToTXT("Base64ToImage异常错误:" + ex.Message); } return bitmap; }