【发布时间】:2015-09-09 08:49:52
【问题描述】:
作为 .net 开发人员,刚接触 android,我正在尝试使用来自我的 asmx webservice 的图像。图像在数据库中保存为nvarchar (bytearray),所以我的 web 服务返回一个可以转换为位图的字符串。这一切都很好,但我在尝试获取带有透明部分的 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 创建了一个不透明的位图,所以其余的转换代码不会创建透明。
我现在苦苦挣扎了好几天,试图找到解决方案,但我似乎没有找到。必须有从 web 服务使用 png 图像的最佳实践,序列化为字符串 (?)。
使用资源中的 png,在透明的情况下可以正常工作,所以我知道我的 png 是透明的,并且我的 UI 控件正常。 (我知道编码不是最先进的,但为了避免复制粘贴各种方法,我替换了一些通常在方法中的代码,以使其更具可读性)
我刚开始一个项目,正在尝试使用 android,所以如果有人对如何将图像导入我的应用程序有完全不同的想法,请随时发表想法。
【问题讨论】:
标签: android image serialization png transparent