我正在 C#for Windows Phone中制作绘图程序。
这适用于Windows Phone ,所以一堆东西在C#中不起作用。
在打开.XAML页面的开始,我有一个空白的画布。用户绘制Canvas,然后单击Save。当他/她单击“保存”时,我希望程序能够将图像保存在“画布”上。
到目前为止,我有以下代码:
IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication();
StreamReader sr = null;
sr = new StreamReader(new IsolatedStorageFileStream("Data\\imagenum.txt", FileMode.Open, isf));
test = sr.ReadLine();
sr.Close();
int.TryParse(test, out test2);
test2 = test2 + 1;
IsolatedStorageFile isf2 = IsolatedStorageFile.GetUserStoreForApplication();
isf2.CreateDirectory("Data");
StreamWriter sw = new StreamWriter(new IsolatedStorageFileStream("Data\\imagenum.txt", FileMode.Create, isf2));
sw.WriteLine(test2);
//This writes the content of textBox1 to the StreamWriter. The StreamWriter writes the text to the file.
sw.Close();
此代码查找图像的适当名称。
我还在网上找到了各种其他代码片段:
// Construct a bitmap from the button image resource.
test = "Images/" + test + ".jpg";
using (IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication())
{
WriteableBitmap bmImage = new WriteableBitmap(image);
if (!store.DirectoryExists("Images"))
{
store.CreateDirectory("Images");
}
using (IsolatedStorageFileStream isoStream =
store.OpenFile(@"Images\" + test + ".jpg", FileMode.OpenOrCreate))
{
Extensions.SaveJpeg(
bmImage,
isoStream,
bmImage.PixelWidth,
bmImage.PixelHeight,
0,
100);
}
}
以上是来自MSDN上的教程以及我自己编写错误的代码的丑陋代码。
(由于半明显的原因,它不起作用)
如何将画布作为图像保存到IsolatedStorage?
答案 0 :(得分:4)
您的第一部分似乎是将最后使用过的数字写入IsolatedStorage
中的文本文件,似乎做了很多相关简单的工作。您可以用以下内容替换整个部分:
IsolatedStorageSettings settings = IsolatedStorageSettings.ApplicationSettings;
int imageNumber = 0;
settings.TryGetValue<int>("PreviousImageNumber", out imageNumber);
imageNumber++;
您可以将图像保存为IsolatedStorage
,如下所示:
using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication())
{
if (!isf.DirectoryExists("Images"))
{
isf.CreateDirectory("Images");
}
IsolatedStorageFileStream fstream = isf.CreateFile(string.Format("Images\\{0}.jpg",imageNumber));
WriteableBitmap wbmp = new WriteableBitmap(image);
Extensions.SaveJpeg(wbmp, fstream, wbmp.PixelWidth, wbmp.PixelHeight, 0, 100);
fstream.Close();
}
但将图像保存到MediaLibrary
可能更有意义:
MediaLibrary library = new MediaLibrary();
WriteableBitmap wbmp = new WriteableBitmap(image);
MemoryStream ms = new MemoryStream();
Extensions.SaveJpeg(wbmp, ms, wbmp.PixelWidth, wbmp.PixelHeight, 0, 100);
ms.Seek(0, SeekOrigin.Begin);
library.SavePicture(string.Format("Images\\{0}.jpg",imageNumber), ms);
无论哪种方式,您都可以将imageNumber
保存回IsolatedStorageSettings
,如下所示:
settings["PreviousImageNumber"] = imageNumber;
settings.Save();
我假设上面使用的image
已设置在代码中的其他位置。我之前没有将Canvas保存到图像中,但是一些快速搜索出现了这个blog,其中使用WriteableBitmap给出了一个示例,表明您可以用canvas元素替换图像变量:
WriteableBitmap wbmp = new WriteableBitmap(yourCanvas, null);
文章还指出Canvas的背景将被忽略并替换为黑色图像,但您可以通过首先向Canvas添加一个矩形以及任何您想要的背景来克服这一点。再一次,我还没试过这个。如果这不起作用,您应该考虑发布另一个与将Canvas转换为图像有关的问题,因为这与您关于保存图像的原始问题实际上是一个单独的问题。
答案 1 :(得分:0)
如果您可以使用CE保存可写图像并想知道如何保存画布, 然后你需要渲染画布到图像或者如果你想保存绘图,然后让用户通过在画布上放置空白图像(带有alpha通道)直接绘制到图像而不是画布,然后使用鼠标移动事件添加画笔标记到图片。因此修改显示和将来输入以保存方法。