前面在使用NPOI中插入图片,结果在导出Excel的时候居然出现了问题:
1、看到问题我是无从下手,结果无意间发现下面这个dpi问题:
2、这时候我回头看了看我缓存图片的方式:
using (WebClient client = new WebClient())
{
try
{
if (!url.StartsWith("https:") || !url.StartsWith("http:"))
{
url = $"https:{url}";
}
client.DownloadFile(new Uri(url), path);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
3、既然它和别人(dpi)都不一样,那咱们就让他们一样,代码如下:
using (WebClient client = new WebClient())
{
if (!url.StartsWith("https:") || !url.StartsWith("http:"))
{
url = $"https:{url}";
}
var data = client.DownloadData(url);
using (var stream = new MemoryStream(data))
{
var bitmap = new BitmapImage();
bitmap.BeginInit();
bitmap.StreamSource = stream;
bitmap.CacheOption = BitmapCacheOption.OnLoad;
bitmap.EndInit();
var dpi = 96;
var rtb = new RenderTargetBitmap(bitmap.PixelWidth, bitmap.PixelHeight, dpi, dpi, PixelFormats.Pbgra32);
var dv = new DrawingVisual();
using (var dc = dv.RenderOpen())
{
dc.DrawImage(bitmap, new Rect(0, 0, bitmap.PixelWidth, bitmap.PixelHeight));
}
rtb.Render(dv);
var encoder = new JpegBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(rtb));
using (var fs = new FileStream(path, FileMode.Create))
{
encoder.Save(fs);
}
}
}
你还别说问题解决了;最终简单的效果先这样吧;以后有时间的话,可以再去摸索一下更复杂的效果;编程不息、Bug不止、无Bug、无生活;改bug的冷静、编码的激情、完成后的喜悦、挖坑的激动 、填坑的兴奋;这也许就是屌丝程序员的乐趣吧;今天就到这里吧;希望自己有动力一步一步坚持下去;生命不息,代码不止;大家抽空可以看看今天分享的效果,有好的意见和想法,可以在留言板随意留言;我看到后会第一时间回复大家,多谢大家的一直默默的关注和支持!如果觉得不错,那就伸出您的小手点个赞并关注一下!