- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我希望能够加载路径的WPF资源字典并将它们一一输出到文件(jpg,bmp,没关系)。这将在一个类库中,MVC 应用程序将访问该类库以呈现到 http 流,因此我纯粹在代码中执行此操作(没有 XAML 页面)。
我已经能够加载字典并遍历路径,但是当我将图像保存到磁盘时,它们是空白的。我知道我错过了一些微不足道的东西,比如将路径应用于一块几何图形,或者将它添加到一些包含矩形或其他东西中,但我的 WPF 经验有些有限。
我正在使用以下代码:
我有一个包含多个路径的 WPF 资源字典,例如:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Path x:Key="Path1" Data="M 100,200 C 100,25 400,350 400,175 H 280" Fill="White" Margin="10,10,10,10" Stretch="Fill"/>
<Path x:Key="Path2" Data="M 10,50 L 200,70" Fill="White" Margin="10,10,10,10" Stretch="Fill"/>
</ResourceDictionary>
public class XamlRenderer
{
public void RenderToDisk()
{
ResourceDictionary resource = null;
Thread t = new Thread(delegate()
{
var s = new FileStream(@"C:\Temp\myfile.xaml", FileMode.Open);
resource = (ResourceDictionary)XamlReader.Load(s);
s.Close();
foreach (var item in resource)
{
var resourceItem = (DictionaryEntry)item;
var path = (System.Windows.Shapes.Path)resourceItem.Value;
var panel = new StackPanel();
var greenBrush = new SolidColorBrush {Color = Colors.Green};
path.Stroke = Brushes.Blue;
path.StrokeThickness = 2;
path.Fill = greenBrush;
panel.Children.Add(path);
panel.UpdateLayout();
string filepath = @"C:\Temp\Images\" + resourceItem.Key + ".jpg";
SaveImage(panel, 64, 64, filepath);
}
});
t.SetApartmentState(ApartmentState.STA);
t.Start();
}
public void SaveImage(Visual visual, int width, int height, string filePath)
{
var bitmap =
new RenderTargetBitmap(width, height, 96, 96, PixelFormats.Pbgra32);
bitmap.Render(visual);
var image = new PngBitmapEncoder();
image.Frames.Add(BitmapFrame.Create(bitmap));
using (Stream fs = File.Create(filePath))
{
image.Save(fs);
}
}
}
最佳答案
经过多次谷歌搜索和反复试验,我似乎已经找到了解决方案。此 post为我指明了正确的方向。
有几个问题:
Measure()
和 Arrange()
需要在容器元素上调用。 UpdateLayout()
不需要调用。 public void RenderToDisk()
{
ResourceDictionary resource = null;
Thread t = new Thread(delegate()
{
var s = new FileStream(@"C:\Temp\myfile.xaml", FileMode.Open);
resource = (ResourceDictionary)XamlReader.Load(s);
s.Close();
foreach (var item in resource)
{
var resourceItem = (DictionaryEntry)item;
var path = (System.Windows.Shapes.Path)resourceItem.Value;
path.Margin = new Thickness(10);
path.HorizontalAlignment = HorizontalAlignment.Center;
path.VerticalAlignment = VerticalAlignment.Center;
path.Width = 48;
path.Height = 48;
path.Stroke = Brushes.White;
path.Fill = Brushes.Black;
var canvas = new Canvas();
canvas.Width = 64;
canvas.Height = 64;
canvas.Margin = new Thickness(0);
canvas.Background = Brushes.Transparent;
canvas.Children.Add(path);
canvas.Measure(new Size(canvas.Width, canvas.Height));
canvas.Arrange(new Rect(new Size(canvas.Width, canvas.Height)));
string filepath = @"C:\Temp\Images\" + resourceItem.Key + ".png";
SaveImage(canvas, (int)canvas.Width, (int)canvas.Height, filepath);
}
});
t.SetApartmentState(ApartmentState.STA);
t.Start();
}
关于wpf - 将 WPF 路径转换为位图文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9607627/
composer的安装 注:我是的PHPstudy下安装的,其他情况也相似 1、配置环境变量 1、打开系统高级设置,具体操作如下图: 路径就是php根目录 2、打开ope
spring介绍 spring概述 spring是一个开源框架,spring是2003年兴起的轻量级java开发框架,由rod johnson 在其著作 expert one
卸载tomcat9 1、因tomcat的安装只需解压到某目录,卸载也只需将原tomcat目录删除即可 2、删除相关注册表。快捷键win+r呼出”运行“,输入"regedit"
本文介绍了从零开始SSM搭建步骤,分享给大家,有助于更好的搭建ssm 第一章:搭建整合环境 1. 搭建整合环境 整合说明:SSM整合可以使用多种方式,咱们会选择XML + 注解的方式 整合
tomcat 服务器是一个免费的开放源代码的 web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试 jsp 程序的首选。本文主要讲述windo
1、建立虚拟主机 那么一个服务器上有两个网站,用户如何访问这两个网站呢?可以有三种方法。 1>两个网站使用不同的IP地址。这样用户在访问第一个网站需在浏览器中输入http://192.1
tomcat安装时默认的端口设置的是8080,而http协议的默认端口是80,所以测试tomcat时需要输入的网址为“http://localhost:8080”,若把tomcat的端口设置为80,
先谈谈dllhotst进程消耗cpu 100%的问题: 服务器正常cpu消耗应该在75%以下,而且cpu消耗应该是上下起伏的,出现这种问题的服务器,cpu会突然一直处 100%的水平,而且不会下降
介绍 kafka是一个分布式的、可分区的、可复制的消息系统。它提供了普通消息系统的功能,但具有自己独特的设计。这个独特的设计是什么样的呢? 首先让我们看几个基本的消息系统术语: •kafka将
URL 静态化可以提高搜索引擎抓取,开启本功能需要对 Web 服务器增加相应的 Rewrite 规则,且会轻微增加服务器负担。本教程讲解如何在 IIS 环境下配置各个产品的 Rewrite 规则。
(amh为独立的一套lnmp/nginx虚拟主机面板,安装请使用纯净系统。不要安装其它的环境包。) (需要使用amh,请先检查你的系统是否支持,amh面板已支持centos、debian、ubunt
在爬虫的过程中,我们经常会遇见很多网站采取了防爬取技术,或者说因为自己采集网站信息的强度和采集速度太大,给对方服务器带去了太多的压力。 如果你一直用同一个代理ip爬取这个网页,很有可能ip会被禁止
*注:此文章谨以记录学习过程,分享学习心得! 刚刚开始了解springboot框架,觉得很好用,觉得很有必要深入学习一下该框架,现在就来创建一个springboot项目: 1、在idea上新建一
自从还了mac 后,原来的笔记本就闲置了下来,这台笔记本的配置还是不错的,可以装几个虚拟机用来平时的搭建小规模集群的实践。 准备工作 安装vmware 版本 :vmware workstati
前言 在用deepin用户界面的时候,做的是真心的好看,界面效果是真的美观简洁,没有那些花哨的特效,就是刚开始还有点不习惯的,尽量安装的时候电脑配置稍微高一点的, deepin 还是比较吃配置的,
本文着重讲解了windows下Git安装教程(图文),文中通过代码实例讲解的非常细致,对大家的工作和学习具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 github是一个项
重装原因:N点无法开通空间提示错误,我们希望重装N点后可以保留已开空间的信息。 1、备份N点管理系统的数据库,具体路径是C:\Program Files\NpointSoft\npointhost
本机电脑系统为:win7 本文以图片为主,含有大量图片 安装centos7虚拟机 新建虚拟机 一直点击下一步,直到分配内存(此处我分配了20g,根据个人情况而定) 创建成功后对硬
Godaddy每月给力的域名神码都深深地吸引着大批大批的站长们,可域名快要到期,转出或者续费就成为一个头痛的事情,下面给出最新的Godaddy域名转出教程,希望能帮助到大家。 1、登录Godad
复制数据库前要先确认目标数据库的服务是否启动 主要是sql server (mssqlserver)这个服务要启动起来其他的看自己的需求 复制数据库 下一步 输入
我是一名优秀的程序员,十分优秀!