.NET 6项目中不使用System.Drawing.Common,如何通过SkiaSharp获取水平分辨率?
用SkiaSharp替代System.Drawing.Common获取水平分辨率
嘿,刚好我之前处理过类似的需求,完全可以用SkiaSharp实现你要的功能,而且适配.NET 6毫无问题,具体步骤如下:
第一步:安装SkiaSharp NuGet包
首先确保你的.NET 6项目已经引入了SkiaSharp,用.NET CLI或者NuGet包管理器都可以:
dotnet add package SkiaSharp
第二步:编写替代代码
原来用System.Drawing.Common的逻辑是创建一个空Bitmap然后读取它的水平分辨率,对应到SkiaSharp里,我们可以通过SKImageInfo或者SKBitmap的相关属性来实现,代码非常直观:
// 方式1:通过SKImageInfo直接获取默认水平分辨率 var imageInfo = new SKImageInfo(1, 1); float horizontalResolution = imageInfo.DpiX; // 方式2:创建SKBitmap后从其Info属性读取(和你原来的代码逻辑更贴近) using var bitmap = new SKBitmap(1, 1); float horizontalResolutionFromBitmap = bitmap.Info.DpiX;
关键说明
- SkiaSharp里的
DpiX属性完全对应System.Drawing的HorizontalResolution,默认值就是系统的默认DPI(通常是96,若系统开启高DPI缩放则会对应实际设置值)。 - 别忘了用
using语句包裹SKBitmap,和System.Drawing的Bitmap一样,它实现了IDisposable,需要手动释放资源避免内存泄漏。 - 如果你的需求是获取当前显示设备的实际物理DPI(而非默认值),那可能需要结合平台特定的API,但如果只是替代你原来的代码逻辑,上面的示例就足够了。
内容的提问来源于stack exchange,提问作者Adam Shakhabov
相关产品推荐
相关产品推荐

