You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++ WinRT技术:如何动态缩放WriteableBitmap匹配当前屏幕分辨率?

嘿,这个需求我熟,给你两种实用的实现方案,都是WPF环境下常用的思路:

方案1:纯原生WPF API实现(无额外依赖)

这种方法不需要引入任何第三方库,用WPF自带的API就能完成缩放,步骤清晰易懂:

  1. 创建一个和目标分辨率(1920x1080)匹配的RenderTargetBitmap
  2. 通过DrawingVisual绘制原WriteableBitmap,并应用等比缩放变换(这里刚好是1.5倍,1920/1280=1.5,1080/720=1.5,完美等比)
  3. 把绘制结果渲染到RenderTargetBitmap,最后转成WriteableBitmap

代码示例:

// 假设你已经有了1280x720的原WriteableBitmap实例originalBitmap
int targetWidth = 1920;
int targetHeight = 1080;

// 初始化目标尺寸的RenderTargetBitmap
var renderTarget = new RenderTargetBitmap(
    targetWidth, 
    targetHeight, 
    96,  // DPI X
    96,  // DPI Y
    PixelFormats.Pbgra32
);

// 使用DrawingVisual绘制并缩放原图像
using (var drawingVisual = new DrawingVisual())
using (var drawingContext = drawingVisual.RenderOpen())
{
    // 计算等比缩放比例
    double scaleX = (double)targetWidth / originalBitmap.PixelWidth;
    double scaleY = (double)targetHeight / originalBitmap.PixelHeight;
    
    // 应用缩放变换
    drawingContext.ScaleTransform(scaleX, scaleY);
    // 绘制原图像
    drawingContext.DrawImage(originalBitmap, new Rect(0, 0, originalBitmap.PixelWidth, originalBitmap.PixelHeight));
    
    // 将绘制内容渲染到RenderTargetBitmap
    renderTarget.Render(drawingVisual);
}

// 将RenderTargetBitmap转换为WriteableBitmap
var scaledBitmap = WriteableBitmap.Create(renderTarget);
方案2:用WriteableBitmapEx库(高效便捷)

如果你能接受引入第三方库,那WriteableBitmapEx绝对是首选——这个专门处理WriteableBitmap的库封装了大量实用扩展方法,缩放功能一行代码就能搞定,还支持多种插值算法。

首先通过NuGet安装包:

Install-Package WriteableBitmapEx

然后直接调用Resize方法:

// 假设原图像是originalBitmap
var scaledBitmap = originalBitmap.Resize(
    1920, 
    1080, 
    WriteableBitmapExtensions.Interpolation.Bilinear  // 双线性插值,兼顾画质和速度
);

你可以根据需求替换插值算法:

  • NearestNeighbor:速度最快,但画质一般,适合对性能要求极高的场景
  • Bilinear:默认推荐,平衡画质和速度
  • Bicubic:画质最好,但计算量稍大

注意:因为你的需求是等比缩放(1280x720 → 1920x1080比例完全一致),所以两种方案都不会出现拉伸变形的问题。如果是非等比缩放,你可能需要额外处理裁剪或填充逻辑。

内容的提问来源于stack exchange,提问作者Ricky Gai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:06:36