#android #sql #database #image #xamarin
#c# #изображение #растровое изображение #xamarin.android
Вопрос:
У меня есть этот код, он очень хорошо работает в android studio, но не в xamarin bitmap.Compress() имеет разные аргументы в xamarin, и я не понимаю, как преобразовать изображение в base64 или двоичный файл в xamarin.android?
Я получаю ошибку в 3-й строке:
(bitmap.Compress() имеет некоторые недопустимые аргументы).
Bitmap bitmap = BitmapFactory.DecodeResource(Resources, Resource.Drawable.ace1);
ByteArrayOutputStream bao = new ByteArrayOutputStream();
bitmap.Compress(Bitmap.CompressFormat.Jpeg, 100,bao);
byte[] ba = bao.ToByteArray();
string bal = Base64.EncodeToString(ba, Base64.Default);
Комментарии:
1. Это ошибка времени компиляции или исключение?
2. Как исключения, так и ошибки во время компиляции являются ошибками. Неясно, что это такое. Похоже, это, вероятно, ошибка времени компиляции, но вам следует отредактировать свой вопрос, чтобы он был более четким.
3. @JonSkeet — Я считаю, что это ошибка времени компиляции, согласно моему опыту.
Ответ №1:
Если вы посмотрите документацию на Bitmap.Compress
Xamarin, вы увидите, что последним параметром является a Stream
.
Эквивалент ByteArrayOutputStream
в .NET MemoryStream
, поэтому ваш код будет:
Bitmap bitmap = BitmapFactory.DecodeResource(Resources, Resource.Drawable.ace1);
MemoryStream stream = new MemoryStream();
bitmap.Compress(Bitmap.CompressFormat.Jpeg, 100, stream);
byte[] ba = stream.ToArray();
string bal = Base64.EncodeToString(ba, Base64Flags.Default);
(Вы могли бы использовать Convert.ToBase64String
вместо Base64.EncodeToString
, если хотите, тоже.)
Комментарии:
1. в строке byte[] ba = stream ошибка. toArray(); поток не может преобразовать в байт[]
2. @EhsanUllah: Исправлено — в объявлении for
stream
должен был быть указан тип времени компиляцииMemoryStream
, поскольку именно тамToArray
объявляется.3. не могли бы вы уточнить свой ответ, Джон?
4. @EhsanUllah: Не уверен, что ты имеешь в виду. Я отредактировал ответ, чтобы указать тип времени компиляции как
MemoryStream
— теперь он должен работать нормально.5. Использование @JonSkeet
using
здесь не рекомендуется? ( дляBitmap
иMemoryStream
)
Ответ №2:
Вот как я получаю Byte[]
для своего Bitmap
объекта:
Byte[] imageArray = null;
Bitmap selectedProfilePic = this.GetProfilePicBitmap ();
if (selectedProfilePic != null) {
using (var ms = new System.IO.MemoryStream ()) {
selectedProfilePic.Compress (Bitmap.CompressFormat.Png, 0, ms);
imageArray = ms.ToArray ();
}
}
Надеюсь, это поможет.