【发布时间】:2015-02-24 23:43:09
【问题描述】:
我需要生成墙壁的预览图像以动态显示。它们都由不同颜色和宽度的条带组成,看起来应该像这样:
现在我可以使用它,但它有点慢(并不可怕,但足以让人感觉有点滞后),我想知道是否有更好的方法。
我目前正在做的是在代码中构造 wpf 对象。我构建了一个网格作为主容器,然后是一个作为预览的堆栈面板,然后是一个底部有标签的文本块(从这个图像中裁剪出来,抱歉),然后我为每个图层添加边框对象(带) 轮廓的边框厚度和适当的颜色作为背景等。然后我使用
RenderTargetBitmap bmp = new RenderTargetBitmap((int)gd.ActualWidth, (int)gd.ActualHeight, 96, 96, PixelFormats.Pbgra32);
bmp.Render(gd);
其中 gd 是保存堆栈面板和文本块的网格对象,然后将其用作图像源。
我使用图像源而不是直接使用 WPF 对象的原因有两个。首先,我有其他对象是需要加载和预览的实际图像文件,所以它们是作为图像源来的,而不是 WPF 视觉对象。其次,我有一个缩略图和一个完整的预览。我希望能够将缩略图显示为预览的缩小版本,如果它是 wpf 对象,我认为您不能这样做(至少不容易)。
无论如何,如果有人有更好的方法来做到这一点,我一定会很感激......
【问题讨论】:
-
如果我误会了,我很抱歉,但我认为这根本不能解决我的问题。如果这是一个静态的层数,那么我可以使用 XAML 并且很乐意这样做,但它可能是从一层到理论上无限的层(实际上可能不超过 10 层)。您将如何设置 XAML 代码来处理它?如果我这样做了,那我在哪里有图像呢?我有多个对象(数十万个),并且以这种方式生成了一些预览,而有些则加载了实际的图像文件。另外,您如何动态缩放以适应缩略图?
-
为了清楚起见,我很想使用纯 XAML 并按照您的建议使用 WPF 图形获得我想要的东西,我只是不确定如何去做,而且您的评论没有具体要弄清楚如何做到这一点......
-
关于缩放,我已经告诉过你WPF会自动缩放,不用担心。
-
我不知道为什么没有人提到你可以用
LinearGradientBrush和Rectangle来创建那个“图像”...绝对不需要BitMapImages或Images。