我有一个不想显示JPEG的ImageView,但会在ListView中显示所有其他PNG。我尝试过添加透明背景等功能,但没有任何效果。为了获取数据,我下载了所有图像,并将它们存储在SQLite数据库中的blob中。我通过从数据库中获取信息来检索它们,并且根据数据库,它们是可用的二进制JPEG数据。
以下是我想要显示的图片(我已将其下载到二进制数据中):http://image-store.slidesharecdn.com/1a4f1444-02e2-11e4-9166-22000a901256-large.jpeg
以下是我用来尝试将二进制数据转换回Bitmap的代码:
try
{
String profilePictureBytes = submittedImageTemp; // this string holds the binary jpeg, png data, etc.
byte[] encoded;
try
{
encoded = profilePictureBytes.getBytes("ISO-8859-1");
ByteArrayInputStream imageStream = new ByteArrayInputStream(encoded);
Bitmap theBitmap = BitmapFactory.decodeStream(imageStream);
attachPreviewOne.setBackgroundColor(Color.TRANSPARENT);
attachPreviewOne.setImageBitmap(theBitmap);
}
catch (UnsupportedEncodingException e)
{
e.printStackTrace();
}
}
答案 0 :(得分:0)
一个。将你的jpeg从blob中提取到temp file。您可能希望将getCacheDir()文件夹用于该
B中。从临时文件加载它:
BitmapFactory.Options options = new BitmapFactory.Options();
Bitmap bm = BitmapFactory.decodeFile(jpegTemFile, options); //<------------
imageView.setImageBitmap(bm);
以上应该工作正常。仍然 - 你可能想要考虑的事情很少:
℃。根据您的jpeg,加载操作 - decodeFile - 可能很长。你可能想要在一个 的AsyncTask。
d。您可能还需要考虑设置sampleSize以减小加载图像的大小:
options.inSampleSize = 2; // setting to N will reduce in-memory size by factor of N*N
或者,您可以使用Picasso来完成工作。我在几个项目中使用它,并对我得到的内容感到满意:
Picasso.with(context)
.load(url)
.resize(50, 50)
.centerCrop()
.into(imageView)