问题标签 [system.windows.media]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2964 浏览

c# - 图像 .net 4.5 的自定义绘图部分

我自定义在屏幕上绘制两个放大图像,一个并排。他们每个人都占据了屏幕的一半。

我以前在.net 3.5(我认为)中通过覆盖 OnPaint() 完成了它:

DrawImage 方法的描述:“在指定位置以指定大小绘制指定Image的指定部分。” ( MSDN )

我正在尝试使用 .net 4.5 来实现相同的目标。我正在覆盖 OnRender 并使用 DrawingContext 对象来执行我的绘图。基本上这是我的循环:

如果我想显示拉伸的图片,它工作得很好。我想要的是显示(在 Window_LeftHalf 和 Window_RightHalf 中)图片的一部分(如放大)。基本上是 graphics.DrawImage (见上图),但使用的是 DrawingContext 对象。

我曾尝试查看 MSDN,但无法提取任何有趣的内容。也许创建一个稍后由 DrawingContext 使用的缓冲区?我几乎可以肯定需要一个中间对象来保存放大的图像。有任何想法吗?

更新:我使用鼠标浏览图像,所以性能重要。例如:

0 投票
1 回答
2954 浏览

c# - 使用 BmpBitmapEncoder 黑色图像保存 Windows.Media.Drawing - 如何删除 alpha?

我正在使用 SVG# ( http://sharpvectors.codeplex.com/ ) 将 SVG 文件批量转换为其他格式。被转换的 SVG 图像是没有背景的黑色线条图。我对 WPF 或 System.Windows.Media 命名空间几乎没有经验,所以如果这是一个基本问题,请原谅。

我正在使用来自 SVG# 的 ImageSvgConverter 的修改版本,它接受一个 System.Windows.Media.Drawing对象,然后使用System.Windows.Media编码器(BmpBitmapEncoderPngBitmapEncoder)将其转换为所需的文件格式。

当我使用 a 导出时TiffBitmapEncoderorPngBitmapEncoder 或者GifBitmap图像按预期生成。生成的图像都有透明背景。

但是,当我使用JpegBitmapEncoderor导出时BmpBitmapEncoder,所有图像都变黑了。由于 tif、png 和 gif 都具有透明背景,我认为 jpg / bmp 图像被正确绘制,但是,由于这些文件格式不支持 alpha,因此具有黑色输出是有意义的,因为透明度会被解释什么都没有/黑色。

我认为这与这些 SO 帖子中所述来自 BitmapSource 的奇怪 bmp 黑色输出 - 有什么想法吗?将透明PNG转换为具有非黑色背景颜色的JPG,并且在保存位图时背景变为黑色-C#

但是,我看不到将这些帖子应用于我的问题的方法。谁能指出我正确的方向?

我尝试将白色 SolidColorBrush 应用于 DrawingContext 的 PushOpacityMask 方法,但是,这没有区别。

非常感谢任何指示。

0 投票
0 回答
96 浏览

c# - 我可以覆盖从资源加载的 DrawingBrush 图像上的颜色吗?

我想在不创建更多资源的情况下更改从资源文件创建的图像的颜色。我目前的解决方案是使用我想要的颜色创建第二个图像资源。但我想在我的代码中设置它。我像这样加载图像:

我可以设置一个新的单色吗?在 Convert32 中,将其设置为 DrawingBrush 还是其他方式?

这是 BitmapSourceFromBrush (感谢Tim Lovell-Smith):

0 投票
2 回答
878 浏览

wpf - 有效地刷新 ImageSource:BitmapImage 与 DrawingImage

我有一个带有GeometryModel3D数据绑定的 WPF 控件。DiffuseMaterialImageBrushImageSource

我的目标是在鼠标悬停时显示“横截面”,为此我已经可以在对象上获得正确的位置。问题是:WPF 中没有“3D 线”。

我做了一个测试,在我使用的图像中画了一条线,ImageSource视觉结果正是我想要的。

所以我打算做以下事情:生成一次基础图像,然后在其上绘制适当的线,将使用的属性设置为ImageSource.

我考虑了两种方法:

  1. 具有类型的绑定 ImageSource BitmapImage。然后我用空白纹理(没有线条)创建System.Drawing.Bitmap一次,然后每次我想要线条改变位置时,我用;重新创建BitmapImage线条。System.Drawing.Graphics

  2. 具有类型的绑定 ImageSource DrawingGroup。然后我创建了System.Windows.Media.ImageDrawing一次,然后每次我希望线改变位置时,我DrawingGroup通过仅更改GeometryDrawing由单行组成的来重新创建。

一种方法比另一种方法有什么内在优势吗?

0 投票
0 回答
90 浏览

c# - ScaleTransform 几何体的一部分

所以我有一个想要缩放的图表几何。

但是,图表在某些 y 范围内的缩放比例不同。

说这是我的 y 轴

我需要将 70-100 之间的部分与 0-1 之间的部分和 1 到 70 之间的部分不同地缩放。有没有办法形成一个具有多个 scaletransforms 的 TransformGroup 仅适用于某些 y 值之间的值?

谢谢。

0 投票
1 回答
396 浏览

wpf - WPF FormattedText 在高分辨率图像中随机消失

我需要创建 600 个 DPI “三折”图像,其尺寸为 25.5"x11"(是 Letter 页面大小的三倍)。为此,我通过 DrawingVisual、DrawingContext 和 RenderTargetBitmap 类使用 WPF Imaging。

当我以较低的分辨率(例如 400 DPI 或更低)生成图像时,所有文本都按预期显示在正确的位置。但是,一旦我将图像分辨率提高到 500 DPI 级别或更高,位于图像最右侧的某些文本将简单地消失,而其他相对定位的文本/形状则可以完美打印。最疯狂的部分是,当我尝试不同的 DPI 时,会出现/消失不同的文本。在一个测试案例中,600 DPI 缺少一组绘制的 FormattedText,650 DPI 缺少另一组绘制的 FormattedText,700 DPI 打印一切正常!

我用下面的代码片段重新创建了这个问题。按原样运行(600 DPI),你得到的只是一张非常大的白色图像。将 Dpi 常数更改为 400 或更低,它可以很好地打印文本。

请注意,我已尝试转动 DrawingVisual 类中的许多旋钮(例如 VisualBitmapScalingMode、VisualTextRenderingMode、VisualEdgeMode 等),但无济于事。我对这些设置的大部分研究发现它们是纠正“模糊”文本而不是消失文本的有用设置。我对 DrawingVisual 或 DrawingContext 的任何指南/捕捉设置也没有运气。

请注意,我已经在 Win7 和 Win2008R2 上重新创建了此问题,并且我的应用程序正在运行 .NET 4.5。

有任何想法吗?

0 投票
0 回答
309 浏览

c# - CompositeTransform.TranslateX 不起作用

我想在画布中显示图片。画布比图片小,我希望图片像下面的示例一样缩放和居中。

我不能使用Stretch=UniformToFill,因为它裁剪了不在框架中的图片部分(例如绿色部分),我需要能够移动图片。(通过移动图片,用户可以选择他想要保留的图片部分)。这也是为什么,我不能使用renderTransform。

我尝试以编程方式缩放和翻译我的图片。我已经根据这篇文章实现了捏缩放,现在我想使用 CompositeTransform 项目来进行我的转换。

规模有效,但翻译无效。无论比例因子设置是什么,都不会改变。

我有什么Stretch=none

我有的

我想以编程方式获得什么:

我需要的

这是我的代码:

0 投票
1 回答
1094 浏览

c# - 使用哪个公式/函数来旋转一系列点

我可以使用什么数学公式来围绕给定的 3d 矢量旋转一系列 3d 矢量?

我正在尝试使用 3rd 方库:Math.NET Iridium来计算我的旋转,但我不知道我应该使用什么公式或数学概念。如您所见,数学不是我的强项,因此需要图书馆。

PS:我尝试使用标准System.Windows.Shapes.PolylineSystem.Windows.Media.RotateTransform但看起来旋转仅在渲染时应用(如果我错了,请纠正我)。我需要在应用后立即知道旋转点的位置RotateTransform

0 投票
1 回答
465 浏览

c# - VB.NET:输出所有 Windows.Media.Brushes

我在 VB.Net 中的 WPF 上有一些形状。我添加了一个处理程序,因此我可以使用我的控件删除或编辑形状。为此,我添加了一个组合框,我想在其中显示所有 Windows.Media.Brushes,以便我可以选择一个并将颜色添加到形状中。

我的问题: - 如何将 Windows.Media.Brushes 的所有名称添加到组合框中?- 如何将名称转换回画笔?

最好的问候,斯坦

0 投票
2 回答
1483 浏览

c# - 绘制一个矩形但笔的颜色不起作用

错误就在后面的线上//Create pen。它指出 System.Windows.Media.Color 不包含“黑色”的定义。我该如何解决?

这个怎么样,然后回到从头开始:

Black说 System.Windows.Media 没有“黑色”的定义时出错。我从Graphics.DrawRectangle得到了这个例子

如何使其适应我的代码?