WPF效果第二百一十七篇之图片dpi问题

前面在使用NPOI中插入图片,结果在导出Excel的时候居然出现了问题:

4ffd8249b0753ed3cd6c0cf8a0f38cdd.png1、看到问题我是无从下手,结果无意间发现下面这个dpi问题:

1baf9362a2b643528bed44687c75c5dd.png2、这时候我回头看了看我缓存图片的方式:

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

你还别说问题解决了;最终简单的效果先这样吧89ff44e9691008a98625e02107448f39.png;以后有时间的话,可以再去摸索一下更复杂的效果dfdec6668809cbbe274af339956dd3d9.png;编程不息、Bug不止、无Bug、无生活1ab79ffc67d23a291bbdeb2355300667.png;改bug的冷静、编码的激情、完成后的喜悦、挖坑的激动 、填坑的兴奋;这也许就是屌丝程序员的乐趣吧;今天就到这里吧;希望自己有动力一步一步坚持下去;生命不息,代码不止;大家抽空可以看看今天分享的效果,有好的意见和想法,可以在留言板随意留言;我看到后会第一时间回复大家,多谢大家的一直默默的关注和支持!如果觉得不错,那就伸出您的小手点个赞并关注一下!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值