如何正确将具有不透明度的UIControl保存到WriteableBitmap中?

3

我在WindowsPhone中创建了一组不同透明度的矩形,并将这些矩形添加到网格中:

var grid=new Grid();
grid.Width = grid.Height = 200;
var rectanglesCount=55;
var rectangleSizeStep = grid.Height / rectanglesCount;
var opacityStep = 1.0 / rectanglesCount
var rectangleSize = grid.Height;
var opacity = 0.0;
for (int i = 0; i <= rectanglesCount; i++)
{
Rectangle rect = new Rectangle();
rect.Height = rect.Width = rectangleSize;
rect.VerticalAlignment = VerticalAlignment.Center;
rect.HorizontalAlignment = HorizontalAlignment.Center;
rect.Fill = new SolidColorBrush(Colors.Yellow);
rect.Opacity = opacity;
opacity += opacityStep;
rectangleSize -= rectangleSizeStep;
grid.Children.Add(rect);
}

我可以在网格中看到下面的图片:

enter image description here

当我尝试将这组矩形保存为WriteableBitmap并显示为图像时:

var img=new Image();
var wrBit = new WriteableBitmap(grid, null);
img.Source=wrBit;

我看到了这张图片:enter image description here

为什么上边和左边的透明度不一样呢? 如何正确地保存一组矩形?

1个回答

1
需要使用Canvas而不是Grid控件来组合矩形:
var canvas=new Canvas();
canvas.Width = canvas.Height = 200;
var rectanglesCount=55;
var rectangleSizeStep = canvas.Height / rectanglesCount;
var opacityStep = 1.0 / rectanglesCount
var rectangleSize = canvas.Height;
var opacity = 0.0;
var rectMargin = 0.0;
for (int i = 0; i <= rectanglesCount; i++)
{
Rectangle rect = new Rectangle();
rect.Height = rect.Width = rectangleSize;
rect.Margin=new Thickness(rectMargin,rectMargin,0,0);
rectMargin += rectangleSizeStep/2;
rect.Fill = new SolidColorBrush(Colors.Yellow);
rect.Opacity = opacity;
opacity += opacityStep;
rectangleSize -= rectangleSizeStep;
canvas.Children.Add(rect);
}

并将 Canvas 保存为 WriteableBitmap:
var img=new Image();
var wrBit = new WriteableBitmap(canvas, null);
img.Source=wrBit;

问题已解决!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接