WPF 修改图片的分辨率/DPI

在WPF中,当使用到PNG之类的图片作为背景时。我发现一个问题:图片属性(Windows)的宽、高相同的两张图片在WPF界面上显示却大小不一。如下图所示。

在后台应用程序调试时发现,两个图片的DPI不一致。

2.png

3.png

百度了下,网友提供了三种解决方法:

  • 创建 BitmapImage 对象,根据当前屏幕的 DPI 值计算 DecodePixelWidth 和 DecodePixelHeight ;

  • 创建 DrawingImage 对象,直接按照 WPF 的坐标单位绘制图片原始像素大小的图片;

  • 创建 Bitmap / WriteableBitmap 对象,重新创建一张 96 DPI 的图片。

尝试了下,没走通,于是另辟蹊径。

在调试的时候,发现Biamap生成的时候DPI已经是299了,因此将目光转到了修改Biamap的DPI。

方法1:

1.将图片加载成bitmap格式,然后转换成BitmapImage格式

     /// <summary>/// 图片转换/// </summary>/// <param name="bitmap">bitmap格式图片</param>/// <returns></returns>private static BitmapImage BitmapToBitmapImage(System.Drawing.Bitmap bitmap){// 直接设置DPIbitmap.SetResolution(96, 96);BitmapImage bitmapImage = new BitmapImage();using (System.IO.MemoryStream ms = new System.IO.MemoryStream()){bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Png);bitmapImage.BeginInit();bitmapImage.StreamSource = ms;bitmapImage.CacheOption = BitmapCacheOption.OnLoad;bitmapImage.EndInit();bitmapImage.Freeze();}return bitmapImage;}

2.使用

            ib2.ImageSource = BitmapToBitmapImage(new System.Drawing.Bitmap(System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "3.png")));

说明:ib2是一个画刷(ImageBrush)。

但是好像在Win7下面这个方法失效了。

方法2:

思路:重新生成一个Bitmap,将原来的从文件资源加载上来的Bitmap绘制到新的Bitmap上。然后再用新的Bitmap去转换成BitmapImage格式。

Bitmap转换方法:

        /// <summary>/// 转换Bitmap类型,通过GDI重新获取一个新的Bitmap。/// </summary>/// <param name="imagePath">原图片的路径</param>/// <returns></returns>private Bitmap TranslateBitmap(string imagePath){// 返回的Bitmap result = null;using (FileStream fs = new FileStream(imagePath, FileMode.Open)){// 原图片信息Bitmap orignal = new Bitmap(fs);// 注意:如果是要透明的图片就需要使用 Format32bppPArgb 格式,具有Alpha透明度。result = new Bitmap(orignal.Width, orignal.Height, System.Drawing.Imaging.PixelFormat.Format32bppPArgb);// 设置 DPI 信息,后来测试发现不用设置//result.SetResolution(96.0F, 96.0F);// 使用GDI画图using (Graphics g = Graphics.FromImage(result)){g.Clear(System.Drawing.Color.Transparent);g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;g.DrawImage(orignal, new System.Drawing.Rectangle(0, 0, result.Width, result.Height), 0, 0, orignal.Width, orignal.Height, GraphicsUnit.Pixel);g.Dispose();}}return result;}

然后稍微修改下BitmapToBitmapImage方法:

     /// <summary>/// 图片转换/// </summary>/// <param name="bitmap">bitmap格式图片</param>/// <returns></returns>private static BitmapImage BitmapToBitmapImage(System.Drawing.Bitmap bitmap){BitmapImage bitmapImage = new BitmapImage();using (System.IO.MemoryStream ms = new System.IO.MemoryStream()){bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Png);bitmapImage.BeginInit();bitmapImage.StreamSource = ms;bitmapImage.CacheOption = BitmapCacheOption.OnLoad;bitmapImage.EndInit();bitmapImage.Freeze();}return bitmapImage;}

问题解决了。


Over
每次记录一小步…点点滴滴人生路…

WPF 设置图片的分辨率DPI相关推荐

  1. 用JavaScript修改Canvas图片的分辨率(DPI)

    应用场景: 仓库每次发货需要打印标签, Canvas根据从数据库读取的产品信息可以生成标签JPG, 但是这个JPG图片的默认分辨率(DPI)是72 这个DPI太低, 导致打印出来的图片会很模糊. 修改 ...

  2. excel 画散点图 怎么设置图片的分辨率_干货纯享 | 你所忽略的论文图片处理技巧...

    医学论文中常常通过图片反映实验过程.数据结果.病案实例等内容,这不仅可以为论文内容提供素材与依据,也能让读者对实验结果与临床治疗有清晰直观的认知,使文章整体更具有客观性.真实性和科学性.同时,图片处理 ...

  3. python批量修改图片的分辨率dpi值

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.必备条件 二.完整代码 总结 前言 很多论文和期刊,对文中插入图片的格式.色彩.图片大小.分辨率(dpi值)都有要 ...

  4. excel 画散点图 怎么设置图片的分辨率_Excel处理临床数据:图表篇

    今天我们继续来学习Excel怎么处理临床数据--图表部分. 图表也是Excel很重要的一部分,其功能位于插入菜单栏中.Excel能做的图形有很多,比如说柱形图.折线图.饼图.面积图......等等,每 ...

  5. excel 画散点图 怎么设置图片的分辨率_【R语言】barplot柱状图+散点图+误差棒

    今日绘图 今天做这个图 涉及到的很多细节问题: 纵坐标标签水平显示 横坐标下移 barplot叠加散点图 柱状图加误差棒 excel计算mean(平均值) excel计算se(标准误) R语言创建矩阵 ...

  6. excel 画散点图 怎么设置图片的分辨率_双代号时标网络图用Excel画

    横道图VS网络图 网络计划图有三种:单代号网络图.双代号网络图.时标网络图,前不久我发了Excel自动生成横道图的模板:但是,横道图与网络图相比,它缺少逻辑,而普通的网络图又不能体现时间进度:所以,双 ...

  7. excel 画散点图 怎么设置图片的分辨率_Slynyrd像素画教程:像素画基础教程

    Slynyrd像素画教程:像素画基础教程 作者:Slynyrd[1] 翻译:三二 (转载请注明出处) 关注公众号:教你画像素画 微信号:pixelfish 微博:教你画像素画2014 在合适的条件下, ...

  8. 论文当中图片保存png、pdf等等的要分辨率DPI

    期刊.会议可能会对文章中图片的分辨率进行要求,我这里会要求是DPI 300. 但是自己当初使用matlab保存成pdf的时候其实是没注意的,然后按照默认自动保存的,刚刚想查看一下到网上搜了搜,可以用p ...

  9. 怎么提高图片分辨率dpi?电脑图片怎么修改分辨率?

    网络平台上找到适用的图片素材,使用时却发现图片分辨率偏低,会影响到图片效果,这时候我们可以采取提高图片分辨率的方式来解决问题,那么如何改图片分辨率(https://www.yasuotu.com/dp ...

最新文章

  1. 在MFC框架下使用osg报内存泄露的解决办法
  2. 12星座程序员写代码
  3. 一个牛人给JAVA初学者的建议。虽然岁月漫长,但仍值得等待
  4. 版权归原作者的飞鸽传书(IPMSG)
  5. Tween Animation----Translate位置移动动画
  6. adb命令怎么打开_用python撸支付宝体验金,才是程序员正确的打开方式!
  7. 你不知道的JS之作用域和闭包(三)函数 vs. 块级作用域
  8. 机器学习笔记(二十四):召回率、混淆矩阵
  9. VS 2017番茄插件安装破解教程:visual assist
  10. 腐蚀rust服务器命令_腐蚀RUST基本指令及服务器指令大全
  11. Linux内核相关资源
  12. [转载]dilated conv带孔卷积、pooling层提高感受野 反卷积 的理解
  13. 使用Python+多线程下载M3U8格式视频(小白)
  14. C# 中DataGridView 表头设置
  15. 前端、数据库面试要点
  16. 淘宝APP用户行为数据分析案例(附python代码及注释)
  17. Cesium 实现卫星效果
  18. 关于导入.a文件后报错Undefined symbols for architecture arm64:
  19. 第五章 彩色图像处理
  20. iOS仿写有妖气漫画、视频捕获框架、启动页广告页demo、多种动画效果等源码...

热门文章

  1. SAP后台作业debug步骤
  2. 【PA2015】【BZOJ4297】Rozstaw szyn
  3. File类的几个方法
  4. 【权限专栏】联盟链的“圆桌会议”
  5. 算法5:队列——解密 QQ 号
  6. cnpm run dev报错These dependencies were not found:* atpl in ./node_modules/consolidate/lib/consolidate
  7. java compiler.run_动态的Java JavaCompilerAPI中文指南
  8. clear属性的作用
  9. Fritzing软件绘制Arduino面包板接线图传感器模块库文件241
  10. 三菱PLC FX3U脉冲轴点动功能块(MC_Jog_P)