位图图像未显示在 imageview 中
bitmap image not displayed in imageview
我创建了一个应用程序,我允许用户在其中 select 来自画廊的图像或从相机拍摄照片并将该图像上传到网络 server.This 代码在 fine.Now 中工作其他屏幕 我正在从 Web 服务器下载图像并将其存储在 sd card.The 问题是,如果图像是 select 从图库中编辑的,图像将显示在图像视图中,但是如果图像被捕获来自相机的图像没有显示在图像视图中,即使文件存在于 sd 卡中
显示图片和从服务器下载的代码
private static class DownloadImage extends AsyncTask<String, Void, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(String... params) {
String filePath = downloadFile("my web service");
return filePath;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
if (result.equalsIgnoreCase("")) {
ivProfilePic.setImageDrawable(context.getResources().getDrawable(R.drawable.user_default));
progressBar.setVisibility(View.GONE);
} else {
profilePicPath = result;
Bitmap bitmapProfilePic = BitmapFactory.decodeFile(profilePicPath);
ivProfilePic.setImageBitmap(bitmapProfilePic);
progressBar.setVisibility(View.GONE);
}
}
}
public static String downloadFile(String url, String dest_file_path) {
try {
File dest_file = new File(dest_file_path);
URL u = new URL(url);
URLConnection conn = u.openConnection();
int contentLength = conn.getContentLength();
DataInputStream stream = new DataInputStream(u.openStream());
byte[] buffer = new byte[contentLength];
stream.readFully(buffer);
stream.close();
DataOutputStream fos = new DataOutputStream(new FileOutputStream(dest_file));
fos.write(buffer);
fos.flush();
fos.close();
} catch (FileNotFoundException e) {
return "";
} catch (IOException e) {
return "";
}
return dest_file_path;
}
您应该在将图像显示到 ImageView 之前缩放图像。
一旦我遇到同样的问题,位图的缩放解决了我的问题。
下面是执行此操作的代码-
Bitmap b = BitmapFactory.decodeByteArray(bitmapProfilePic , 0, bitmapProfilePic .length)
ivProfilePic.setImageBitmap(Bitmap.createScaledBitmap(b, 120, 120, false));
希望这能解决您的问题
祝一切顺利。
在 KITKAT(API 19) 设备上遇到此问题,但在 LOLLIPOP_MR1(API 22) 设备 运行 上没有遇到此问题。我猜 API 22 或以上不需要做 createScaledBitmap,但是对于设备 运行 on API 19 或以下 ,它需要一些东西像这样:
Bitmap myPictureBitmap = BitmapFactory.decodeFile(imagePath);
if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP_MR1) {
myPictureBitmap = Bitmap.createScaledBitmap(myPictureBitmap, ivMyPicture.getWidth(),ivMyPicture.getHeight(),true);
}
ivMyPicture.setImageBitmap(myPictureBitmap);
我创建了一个应用程序,我允许用户在其中 select 来自画廊的图像或从相机拍摄照片并将该图像上传到网络 server.This 代码在 fine.Now 中工作其他屏幕 我正在从 Web 服务器下载图像并将其存储在 sd card.The 问题是,如果图像是 select 从图库中编辑的,图像将显示在图像视图中,但是如果图像被捕获来自相机的图像没有显示在图像视图中,即使文件存在于 sd 卡中
显示图片和从服务器下载的代码
private static class DownloadImage extends AsyncTask<String, Void, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(String... params) {
String filePath = downloadFile("my web service");
return filePath;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
if (result.equalsIgnoreCase("")) {
ivProfilePic.setImageDrawable(context.getResources().getDrawable(R.drawable.user_default));
progressBar.setVisibility(View.GONE);
} else {
profilePicPath = result;
Bitmap bitmapProfilePic = BitmapFactory.decodeFile(profilePicPath);
ivProfilePic.setImageBitmap(bitmapProfilePic);
progressBar.setVisibility(View.GONE);
}
}
}
public static String downloadFile(String url, String dest_file_path) {
try {
File dest_file = new File(dest_file_path);
URL u = new URL(url);
URLConnection conn = u.openConnection();
int contentLength = conn.getContentLength();
DataInputStream stream = new DataInputStream(u.openStream());
byte[] buffer = new byte[contentLength];
stream.readFully(buffer);
stream.close();
DataOutputStream fos = new DataOutputStream(new FileOutputStream(dest_file));
fos.write(buffer);
fos.flush();
fos.close();
} catch (FileNotFoundException e) {
return "";
} catch (IOException e) {
return "";
}
return dest_file_path;
}
您应该在将图像显示到 ImageView 之前缩放图像。 一旦我遇到同样的问题,位图的缩放解决了我的问题。
下面是执行此操作的代码-
Bitmap b = BitmapFactory.decodeByteArray(bitmapProfilePic , 0, bitmapProfilePic .length)
ivProfilePic.setImageBitmap(Bitmap.createScaledBitmap(b, 120, 120, false));
希望这能解决您的问题
祝一切顺利。
在 KITKAT(API 19) 设备上遇到此问题,但在 LOLLIPOP_MR1(API 22) 设备 运行 上没有遇到此问题。我猜 API 22 或以上不需要做 createScaledBitmap,但是对于设备 运行 on API 19 或以下 ,它需要一些东西像这样:
Bitmap myPictureBitmap = BitmapFactory.decodeFile(imagePath);
if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP_MR1) {
myPictureBitmap = Bitmap.createScaledBitmap(myPictureBitmap, ivMyPicture.getWidth(),ivMyPicture.getHeight(),true);
}
ivMyPicture.setImageBitmap(myPictureBitmap);