当前位置: 首页 > article >正文

WPF中RenderTargetBitmap问题解决

位置问题

使用RenderTargetBitmap截取某一可视元素时,很多时候会出现元素并不是在图片左上角的问题。

解决这一问题的方法是,在要截取元素外,再加一个Border。

例如:

<Border>
    <Canvas Name="ToRender">
    </Canvas>
</Border>

背景黑色问题

希望背景是其他颜色,只要设置截取元素的背景即可。例如:

<Border>
    <Canvas Name="ToRender" Background="White">
    </Canvas>
</Border>

导出尺寸跟实际尺寸不一致问题

使用以下代码解决:

var renderBitmap = new RenderTargetBitmap(width, height, 96, 96, PixelFormats.Pbgra32);
var visualBrush = new VisualBrush(ToRender);
var drawingVisual = new DrawingVisual();
using (var drawingContext = drawingVisual.RenderOpen())
{
    drawingContext.DrawRectangle(visualBrush, null, new Rect(0, 0, width, height));
}
renderBitmap.Render(drawingVisual);

var encoder = new JpegBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(renderBitmap));
using (var fileStream = new FileStream("result.jpg", FileMode.Create))
{
    encoder.Save(fileStream);
}

分辨率非96问题

显示器中显示图片的分辨率为96。当导出图片的分辨率非这个值时(例如打印一般用dpi300),需要进行调整。

var renderBitmap = new RenderTargetBitmap(width, height, dpi, dpi, PixelFormats.Pbgra32);
var visualBrush = new VisualBrush(ToRender);
var drawingVisual = new DrawingVisual();
using (var drawingContext = drawingVisual.RenderOpen())
{
    drawingContext.DrawRectangle(visualBrush, null, new Rect(0, 0, width / dpi * 96, height / dpi * 96));
}
renderBitmap.Render(drawingVisual);

var encoder = new JpegBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(renderBitmap));
using (var fileStream = new FileStream("result.jpg", FileMode.Create))
{
    encoder.Save(fileStream);
}


http://www.kler.cn/a/471745.html

相关文章:

  • 数据库中锁与ETL的故障排除和性能优化
  • 快速上手:采用Let‘sEncrypt免费SSL证书配置网站Https (示例环境:Centos7.9+Nginx+Let‘sEncrypt)
  • ECharts系列:echart中折线图折线设置不平滑显示
  • Centos 下安装 GitLab16.2.1
  • 测试岗位的基础知识
  • Directx12 chapter4
  • 服务器等保测评审计日志功能开启(auditd)和时间校准
  • 如何从串 ‘ 中国 +86‘ 中,获取到‘中国’:strip()、split()及正则表达式的使用
  • 通达信行情接口失效?C# 实现获取五档报价行情 GetSecurityQuotes
  • Ubuntu 安装 Java 1.8
  • Ruby语言的数据库编程
  • 【Uniapp-Vue3】v-bind指令实现图片切换
  • 将 Docker 和 Kubernetes 的存储目录迁移到更大的磁盘分区上
  • transformer深度学习实战CCTSDB中国交通标志识别
  • 游戏语音趋势解析,社交互动有助于营造沉浸式体验
  • 【gRPC】一元拦截器与流式拦截器确保请求附带认证令牌token
  • 自然灾害事件复盘分析的思考框架
  • Flutter使用GestureDetector工具实现手势缩放效果
  • C++二十三种设计模式之工厂方法模式
  • 力扣-数据结构-15【算法学习day.86】
  • 前端如何处理后端传入的复杂数据格式
  • 常见的显示器分辨率及其对应的像素数量
  • 短诗《腊八粥》
  • 【python】Luhn算法验证身份证号码的程序
  • Linux初识——基本指令
  • [Qt] 多元素控件 | 容器类控件 | 布局管理器layout