【发布时间】:2015-03-17 20:17:00
【问题描述】:
所以我正在尝试保存 UserControl 的 png 以用作图块。我使用的代码是
SquareTile sq = new SquareTile();
sq.Measure(new Size(336,336));
sq.Arrange(new Rect(0,0,336,336));
RenderExtensions.SaveToFile(sq);
RenderExtension 类看起来像这样
public static class RenderExtensions
{
public static bool SaveToFile(this UIElement visualTreeElement)
{
WriteableBitmap wb = new WriteableBitmap(336, 336);
wb.Render(visualTreeElement, null);
wb.Invalidate();
return wb.SaveToFile();
}
public static bool SaveToFile(this WriteableBitmap renderTargetBitmap)
{
try
{
string fname = "Shared/ShellContent/SquareTile.png";
//StorageFile liveTileImageFile = localFolder.CreateFile("/Shared/ShellContent/SquareTile.png", CreationCollisionOption.ReplaceExisting);
ExtendedImage ei = new ExtendedImage();
byte[] result = new byte[renderTargetBitmap.Pixels.Length * sizeof(int)];
Buffer.BlockCopy(renderTargetBitmap.Pixels, 0, result, 0, result.Length);
ei.SetPixels(336,336,result);
if (ei != null)
{
IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication();
using (isf)
{
if (!isf.DirectoryExists("Shared")) { isf.CreateDirectory("Shared"); }
if (!isf.DirectoryExists("Shared/ShellContent")) { isf.CreateDirectory("Shared/ShellContent"); }
if (isf.FileExists(fname)) { isf.DeleteFile(fname); }
using (var stream = new IsolatedStorageFileStream(fname, System.IO.FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite, isf))
{
ei.WriteToStream(stream, fname);
stream.Close();
}
}
}
return true;
}
catch (Exception ex)
{
return false;
}
}
}
现在瓷砖看起来像这样(注意背景颜色有一些透明度)
如果我在网格中添加相同的 UserControl,它实际上看起来像这样
这是这个用户控件显示的原始图像
即使图像在那里不透明,您也可以看到红色是如何变成蓝色的。 为什么会这样?
更新: 我还尝试了一个不同的图像,只有红蓝和黄三种颜色。原来只有红色和蓝色正在切换。
【问题讨论】:
标签: c# silverlight windows-phone-8.1 render writeablebitmap