【发布时间】:2012-10-06 20:13:14
【问题描述】:
在 C#、WPF 中我创建了一个矩形:
Rectangle myRgbRectangle = new Rectangle();
myRgbRectangle.Width = 1;
myRgbRectangle.Height = 1;
SolidColorBrush mySolidColorBrush = new SolidColorBrush();
是的,我真的只是希望它是 1 像素乘 1 像素。我想根据可变高度更改颜色,如下所示:
mySolidColorBrush.Color = Color.FromArgb(255, 0, 0, (byte)height);
myRgbRectangle.Fill = mySolidColorBrush;
现在,我如何在屏幕上的特定 x,y 位置绘制?我的 MainWindow.xaml 上有一个网格 (myGrid)。
谢谢!
以下是相关代码:
myRgbRectangle.Width = 1;
myRgbRectangle.Height = 1;
SolidColorBrush mySolidColorBrush = new SolidColorBrush();
int height;
for (int i = 0; i < ElevationManager.Instance.heightData.GetLength(0); i++)
for (int j = 0; j < ElevationManager.Instance.heightData.GetLength(1); j++)
{
height = ElevationManager.Instance.heightData[i, j] / 100;
// Describes the brush's color using RGB values.
// Each value has a range of 0-255.
mySolidColorBrush.Color = Color.FromArgb(255, 0, 0, (byte)height);
myRgbRectangle.Fill = mySolidColorBrush;
myCanvas.Children.Add(myRgbRectangle);
Canvas.SetTop(myRgbRectangle, j);
Canvas.SetLeft(myRgbRectangle, i);
它抛出了这个错误:指定的视觉已经是另一个视觉的孩子或 CompositionTarget 的根。
【问题讨论】:
-
你要创建多少个这样的 1 像素矩形?
-
一大堆这些 3600 x 3600。我真的只想绘制彩色像素。
-
嗯,这大约是 1300 万个矩形。不可能的!并且您已经对上一个问题得到了答案(作为评论):WriteableBitmap 是 only 明智的方法。
-
我不明白为什么这是不可能的。我被告知 WriteableBitmap 有内存泄漏。另外,我不能使用“不安全”的代码。
-
这仅仅是因为 WPF 是关于矢量图形的。它试图摆脱像素并通过填充区域绘制所有内容,这些区域具有由浮点坐标定义的边界。见Graphics and Multimedia。
标签: wpf draw rectangles