アプリ内で (CameraCaptureTask を使用して) 撮影した写真を分離ストレージに保存したいと考えています。現在の問題は、常にOutOfMemoryExceptionにつながる RAM の消費です。これは、画像を Image-Control にロードしているときにも発生します。
私のアプリは最終的に 10 枚の写真を撮り、それらを分離ストレージに保存し、それらをイメージ コントロールに表示し、必要に応じて写真を完全に削除できるようになります。
写真の解像度を下げると論理的に例外が修正されましたが、それは私が望んでいた方法ではありません.
多分あなたは私にヒントを与えることができます。
これが私のコードです:
private CameraCaptureTask ccTask = new CameraCaptureTask();
WriteableBitmap[] imgList = new WriteableBitmap[10];
Random rnd = new Random();
private void addPicture_button_Click(object sender, EventArgs e)
{
ccTask.Show();
ccTask.Completed += ccTask_Completed;
}
void ccTask_Completed(object sender, PhotoResult e)
{
if (e.TaskResult == TaskResult.OK)
{
WriteableBitmap writeableBitmap = new WriteableBitmap(1600,1200);
writeableBitmap.LoadJpeg(e.ChosenPhoto);
string imageFolder = "Unfaelle";
string datetime = DateTime.Now.ToString().Replace("/","");
datetime = datetime.Replace(":","");
string imageFileName = "Foto_"+datetime+".jpg";
using (var isoFile = IsolatedStorageFile.GetUserStoreForApplication())
{
if (!isoFile.DirectoryExists(imageFolder))
{
isoFile.CreateDirectory(imageFolder);
}
string filePath = System.IO.Path.Combine(imageFolder, imageFileName);
using (var stream = isoFile.CreateFile(filePath))
{
writeableBitmap.SaveJpeg(stream, writeableBitmap.PixelWidth, writeableBitmap.PixelHeight, 0, 100);
}
}
//now read the image back from storage to show it worked...
BitmapImage imageFromStorage = new BitmapImage();
using (var isoFile = IsolatedStorageFile.GetUserStoreForApplication())
{
string filePath = System.IO.Path.Combine(imageFolder, imageFileName);
using (var imageStream = isoFile.OpenFile(
filePath, FileMode.Open, FileAccess.Read))
{
imageFromStorage.SetSource(imageStream);
}
}
Rectangle b = new Rectangle()
{
Width = 100,
Height = 100,
};
Thickness margin = b.Margin;
margin.Left = 10;
margin.Top = 10;
b.Margin = margin;
ImageBrush imgBrush = new ImageBrush();
imgBrush.ImageSource = imageFromStorage;
b.Fill = imgBrush;
b.Tag = System.IO.Path.Combine(imageFolder, imageFileName);
b.Tap += OnTapped;
pictures_wrapPanel.Children.Add(b);
}
}
private void OnTapped(object sender, System.Windows.Input.GestureEventArgs e)
{
Rectangle r = sender as Rectangle;
BitmapImage imageFromStorage = new BitmapImage();
using (var isoFile = IsolatedStorageFile.GetUserStoreForApplication())
{
string filePath = r.Tag.ToString();
using (var imageStream = isoFile.OpenFile(
filePath, FileMode.Open, FileAccess.Read))
{
imageFromStorage.SetSource(imageStream);
}
}
img.Source = imageFromStorage;
}
どうもありがとう、不明な点があれば、お気軽に質問してください。写真を保存するもっと簡単な方法があるかもしれません。私はアプリ開発を始めたばかりです。
ところで: 1600x1200 は 2MP です。例外を回避するために解像度を下げましたが、残念ながら遅延しました