Как разработчик .net, новый для android, я пытаюсь использовать изображения с моего asmx webservice
. Изображения сохраняются в db как nvarchar
(bytearray), поэтому мой веб-сервис возвращает строку, которая может быть преобразована в растровое изображение. Все это прекрасно работает, но у меня возникают проблемы с попыткой получить png-изображения с прозрачными частями. Независимо от того, что я пытаюсь, прозрачные части всегда белые. Проблема в том, что здесь может быть несколько вещей, которые я делаю неправильно ...android image serialization transparent png
Так я пишу свой png для db (C#) (может быть, я уже теряю прозрачность здесь?) :
Image toAdd = Image.FromFile(@"I:\Andoid\h1graph.png");
string imagestring = System.Convert.ToBase64String(imageToByteArray(toAdd));
И это путь, я потребляю его на моем приложении для Android:
Bitmap bmp;
androidHttpTransport.call(SOAP_ACTION, envelope);
SoapPrimitive resultsRequestSOAP = (SoapPrimitive) envelope.getResponse();
String result = resultsRequestSOAP.toString();
if (!result.equals("")) {
byte[] bloc = Base64.decode(result, Base64.DEFAULT);
bmp = BitmapFactory.decodeByteArray(bloc, 0, bloc.length);
bmp.setHasAlpha(true);
ByteArrayOutputStream os = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, os);
byte[] bloc2 = os.toByteArray();
Bitmap bPNGCompress = BitmapFactory.decodeByteArray(bloc2, 0, bloc2.length);
viewModel.setThreeD(bPNGCompress) ;
}
Я раздел код так, только существенный код есть. Таким образом, это работает, но не сохраняет прозрачность.
Я предполагаю, это потому, что BitmapFactory.DecodeByteArray
создает растровое изображение без прозрачности, поэтому остальная часть кода преобразования не создаст прозрачность.
Я боюсь уже несколько дней, пытаясь найти решения, но я, кажется, не нахожу его. Должна быть лучшая практика для использования png-изображений из веб-службы, сериализована как строка (?).
Использование png из ресурсов, работает нормально с прозрачностью, поэтому я знаю, что мой png прозрачен, а элементы управления пользовательского интерфейса в порядке. (Я знаю, что кодирование не соответствует уровню техники, но чтобы избежать необходимости копировать все виды методов, я заменил некоторый код, который обычно используется в методах, чтобы сделать его более читаемым)
Я нахожусь в начале проекта, экспериментируя с андроидом, поэтому, если у кого-то есть совершенно другая идея о том, как получить изображения в моем приложении, будьте свободны публиковать идеи.
Спасибо за идею, но это не имеет никакого значения ... все еще нет прозрачности. Я пишу тестовое приложение.net, чтобы проверить, потеряется ли прозрачность, когда я добавляю его в db в виде строки, или если проблема в коде, где я использую строку в приложении для Android. Надеюсь, это даст мне представление о том, где искать. – user2329274
Да, это правильно - вы потеряли биты ALPHA (прозрачности). Я протестировал вышеприведенный код, и он работает хорошо (также был обновлен ответ). –
Большое спасибо Маркус! Теперь я знаю, где искать. Как вы создали свою строку изображения, которая также может помочь мне. – user2329274