Fotos aus Control speichern
Hallo Zusammen
Ich versuche gerade ein Bild aus einem Image Control in den Isolated Storage zu speichern. Jedoch bekomme ich es nicht gerade nicht so recht hin. wenn ich die Zuweisung über (BitmapImage) ImageControl.Source Versuche zu konvertieren kommt beim ausführen jeweils ein Fehler.
Kann mir irgendjemand weiterhelfen?
Gruss
Nemoc
AW: Fotos aus Control speichern
Was kommt denn genau für eine Exception (also die genaue Fehlermeldung). Ist da evtl. kein BitmapImage die Source sondern etwas anderes? Als Workaround könntest du theoretisch das Control in ein WritableBitmap rendern lassen und das dann speichern - ist zwar etwas ein Hack aber sollte zur Not klappen.
AW: Fotos aus Control speichern
Also mit folgender Zeile Code:
Collection.Bild = (BitmapImage) imageControl.Source;
kam folgenden Fehlermeldung:
Type 'System.Windows.Media.ImageSource' cannot be serialized. Consider marking it with the DataContractAttribute attribute, and marking all of its members you want serialized with the DataMemberAttribute attribute.
Collection.Bild hat den Typ BitmapImage. Selbes verhalten respektive Fehlermeldung kommt jedoch auch wenn ich den Typ ImageSource verwende.
Einen Ansatz den ich noch gefunden habe wäre die Source aus dem Image Controll in ein WriteableBitmap zu konvertieren und dann du speichern. Dies wäre Grundsätzlcih über die bmp.SaveJpeg() Methode möglich welche einen Stream zurückgibt. Jedoch habe ich hier noch keine Möglichkeit gefunden um dies in die IsolatedStorageSettings zu speichern, sondern nur über den Stream in eine Datei.
AW: Fotos aus Control speichern
Du könntest theoretisch mit SaveJpeg in einen MemoryStream speichern und dir dann mit der ToArray()-Methode daraus ein Byte-Array machen. Das sollte sich in die Settings legen lassen. Am Rückweg halt dann einen MemoryStream aus dem Byte-Array erstellen und das dann mit der Image-Source auslesen.
Ob es aber generell so eine gute Idee ist große Datenmengen wie Bilder direkt in der IsolatedStorage abzulegen ist allerdings eine andere Frage. Evtl. wäre es besser das doch in ein File zu schreiben und dann halt den Dateinamen (z.B. eine GUID) in der Datenstruktur im IsolatedStorage zu haben.
AW: Fotos aus Control speichern
M,h werd es wohl mal so versuchen. Ist vielleicht die bessere Lösung. =)
Danke vielmals.
AW: Fotos aus Control speichern
Habe doch nochmal ein Problem. Habe ein Bild über folgenden Code in den Isolated Storage gespeichert:
Code:
public byte[] EncodeToJpeg(WriteableBitmap wb)
{
using (MemoryStream stream = new MemoryStream())
{
wb.SaveJpeg(stream, wb.PixelWidth, wb.PixelHeight, 0, 98);
return stream.ToArray();
}
}
public string AddImage(WriteableBitmap image)
{
string BildGuid = String.Empty;
try
{
PhotoHelper photoHelperClass = new PhotoHelper();
BildGuid = Guid.NewGuid().ToString();
photoHelperClass.PhotoDateiPfadAnlegen();
//Bilder speichern
IsolatedStorageFile file = IsolatedStorageFile.GetUserStoreForApplication();
IsolatedStorageFileStream filestream = file.CreateFile("images/" + BildGuid + ".jpg");
byte[] stream = photoHelperClass.EncodeToJpeg(image);
filestream.Write(stream, 0, stream.Length);
filestream.Flush();
filestream.Close();
}
catch(Exception ex)
{
}
return BildGuid;
}
Nun habe ich das wieder über den Filestream versucht auszulesen. Dabei war der vielversprechendste Versuch folgendes:
Code:
public WriteableBitmap LoadImage(string BildGuid)
{
try
{
IsolatedStorageFile file = IsolatedStorageFile.GetUserStoreForApplication();
IsolatedStorageFileStream filestream = file.CreateFile("images/" + BildGuid + ".jpg");
// Decode the JPEG stream.
WriteableBitmap myBitmap = PictureDecoder.DecodeJpeg(filestream);
return myBitmap;
}
catch (Exception ex)
{
}
return null;
}
Jedoch kommt hier die Fehlermeldung "Falscher Parameter". Kann mir jemand sagen was ich falsch mache, respektive hat eine andere Idee wie ich die Datei wieder in ein WriteableBitmap kriege?
Danke und Gruss
AW: Fotos aus Control speichern
Du kannst ein File zum Lesen nicht mit "CreateFile" öffnen... Das gibt es dann ja schon und damit dürfte dann wohl das Create fehlschlagen.
Stattdessen dürfte sich das empfehlen: f.OpenFile(path, System.IO.FileMode.Open, System.IO.FileAccess.Read)
AW: Fotos aus Control speichern
Menschenskinder, der ist mehr als nur ein bisschen peinlich. Mit dem richten Modus klappts dann auch Problemlos...
Code:
IsolatedStorageFileStream filestream = file.OpenFile("images/" + BildGuid + ".jpg", FileMode.Open);
Danke für den Hint =)
Gruss