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;
}

浙公网安备 33010602011771号