Kann jemand mich auf ein Beispiel von ein Foto machen und speichern mit MVVMCross
?Benötigen Sie ein Beispiel für ein Bild mit MonoDroid und MVVMCross
Ich habe gesucht, aber habe dies nur gefunden:
Monodroid Take a picture with Camera (nicht implementiert MVVMCross)
Video Recording (Es ist ein Video und ich kann nicht damit es funktioniert: S
)The Oficialy Recipe Example (es funktioniert aber nicht implementiert MVVMCross)
Danke !!!
Gelöst! Danke!
To Future Referenzen: (Verwenden von Master Branch)
Credits Stuart, Ich habe gerade den Code mit meiner Realität zu arbeiten
using Cirrious.MvvmCross.ExtensionMethods;
using Cirrious.MvvmCross.Interfaces.Platform.Tasks;
using Cirrious.MvvmCross.Interfaces.ServiceProvider;
using SIGEP.DummyService;
using SIGEP.Mobile.Core.Interfaces;
namespace SIGEP.Mobile.Core.Models
{
public class PhotoService : IMvxServiceConsumer<IMvxPictureChooserTask>
{
private const int MaxPixelDimension = 1024;
private const int DefaultJpegQuality = 92;
public void GetNewPhoto()
{
this.GetService<IMvxPictureChooserTask>().TakePicture(
MaxPixelDimension,
DefaultJpegQuality,
HandlePhotoAvailable,
() => { /* cancel is ignored */ });
}
public event EventHandler<PhotoStreamEventArgs> PhotoStreamAvailable;
private void HandlePhotoAvailable(Stream pictureStream)
{
var handler = PhotoStreamAvailable;
if (handler != null)
{
handler(this, new PhotoStreamEventArgs() { PictureStream = pictureStream, OnSucessGettingPhotoFileName = OnSucessGettingPhotoFileName });
}
}
public static void TakePhoto(Action<string> successFileName, Action<Exception> error)
{
var service = new PhotoService();
service.OnSucessGettingPhotoFileName = successFileName;
service.OnError = error;
service.GetNewPhoto();
service.PhotoStreamAvailable += new EventHandler<PhotoStreamEventArgs>(service_PhotoStreamAvailable);
}
static void service_PhotoStreamAvailable(object sender, PhotoStreamEventArgs e)
{
//grava pra ficheiro!!!
var directory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
var filename = Path.Combine(directory, "photo.jpeg");
string saveTo = filename;
FileStream writeStream = new FileStream(saveTo, FileMode.Create, FileAccess.Write);
ReadWriteStream(e.PictureStream, writeStream);
e.OnSucessGettingPhotoFileName(filename);
}
private static void ReadWriteStream(Stream readStream, Stream writeStream)
{
int Length = 256;
Byte[] buffer = new Byte[Length];
int bytesRead = readStream.Read(buffer, 0, Length);
// write the required bytes
while (bytesRead > 0)
{
writeStream.Write(buffer, 0, bytesRead);
bytesRead = readStream.Read(buffer, 0, Length);
}
readStream.Close();
writeStream.Close();
}
public Action<string> OnSucessGettingPhotoFileName { get; set; }
public Action<Exception> OnError { get; set; }
}
[Serializable]
[ComVisible(true)]
public class PhotoStreamEventArgs : EventArgs
{
public Stream PictureStream { get; set; }
public Action<string> OnSucessGettingPhotoFileName { get; set; }
}
}
Das VideoRecorder-Beispiel - https://gist.github.com/3945799 - basiert auf Xamarin.Mobile - und es könnte ein großartiger Ort sein, um mit In-App-Fotoaufnahmen zu beginnen. – Stuart
Momentan benutze ich den Meisterbrunch. Ich werde auf den vnext upgraden und es hoffentlich zum Laufen bringen! Danke @Stuart – ptorrezao
Dieser Code, den ich gepostet habe, sollte in der Master-Zweig arbeiten - wenn Sie bereits arbeiten in Master, dann denke ich, dass Sie es einfacher finden wird, es in Master arbeiten statt auf PCLs in vNext wechseln :) – Stuart