Ben araştırmalar yaptı ve bu çözüm üzerinde düştü: http://forums.xamarin.com/discussion/22682/is-there-a-way-to-turn-an-imagesource-into-a-byte-arrayImageSource'a byte [] için çapraz platform çözümü var mı?
Biz HTTP Post aracılığıyla bir resim yüklemek istiyorum, burada denedik ne:
HttpClient httpClient = new HttpClient();
byte[] TargetImageByte = **TargetImageSource**; //How to convert it to a byte[]?
HttpContent httpContent = new ByteArrayContent (TargetImageByte);
httpClient.PostAsync ("https://api.magikweb.ca/debug/file.php", httpContent);
Biz de vardır Kütüphaneler ile zor zaman geçirmemiz, kullanım maddelerine dahil olmalıyız. using System.IO;
çalışır gibi görünüyor, ancak bize FileInfo
veya FileStream
gibi sınıflara erişim sağlamıyor.
Özel platform tabanlı dönüştürücülerden bunun nasıl yapılabileceği konusunda bir fikri olan var mı? Muhtemelen bir Xamarin.Forms.ImageSource işlevi toByte()?
Daha fazla bilgiye ihtiyacınız varsa bilin.
TargetImageSource
Xamarin.Forms.ImageSource
'dur.
ImageSource TargetImageSource = null;
Çözelti (Aşama doğru)
ImageSource
mevcut başka bir tip köken vardır, önceki tip byte[]
dönüştürülebilir. Bu durumda, bir resim çekmek için Xamarin.Forms.Labs kullanın ve FileStream
özelliğine özelliği aracılığıyla erişilebildiği bir MediaFile
döndürür.
//--Upload image
//Initialization
HttpClient httpClient = new HttpClient();
MultipartFormDataContent formContent = new MultipartFormDataContent();
//Convert the Stream into byte[]
byte[] TargetImageByte = ReadFully(mediaFile.Source);
HttpContent httpContent = new ByteArrayContent (TargetImageByte);
formContent.Add (httpContent, "image", "image.jpg");
//Send it!
await httpClient.PostAsync ("https://api.magikweb.ca/xxx.php", formContent);
App.RootPage.NavigateTo (new ClaimHistoryPage());
fonksiyonu:
public static byte[] ReadFully(Stream input)
{
using (MemoryStream ms = new MemoryStream()){
input.CopyTo(ms);
return ms.ToArray();
}
}
Doğru olduğuna inanıyorum! ImageSource sadece bir görünüm öğesidir. Resim çekildikten sonra görüntüyü anı olarak bir akış olarak alıyorum. 'TargetImageSource = ImageSource.FromStream (() => mediaFile.Source)' ' ' Stream' veya 'MediaFile'ı' byte [] 'a çevirip çözümünüzü güncelleyeceğim. –
, küçük bir güncelleme ekledi, ama bence bu fikri zaten aldınız. –
Bir güncelleme eklediniz, 'ImageSource' anlayışımı düzelttiniz. Tek eğlence alternatifi, “ImageSource” un, daha önce olduğu gibi geri alınabilmesiydi: “ImageSource.Stream” –