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;

        }

  

posted @ 2023-03-13 17:58  fulllove  阅读(151)  评论(0编辑  收藏  举报