我有一个应用程序,可以上传相机拍摄的照片并将其上传到服务器。 但当我试图从服务器进入我的imageview时,它说位图是大(以像素为单位)
我该如何解决这个问题?
new DownloadImageTask(imgProfile)
.execute("http://api.nl/local/index.php?action=get_user_profile_picture&username="
+ SaveSharedPreferences.user.getUsername()
+ "&password="
+ SaveSharedPreferences.user.getPassword()
+ "&user_number="
+ SaveSharedPreferences.user.getUserNumber());
这是我用来处理图像到imageview的代码:
class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
ImageView bmImage;
public DownloadImageTask(ImageView bmImage) {
this.bmImage = bmImage;
}
protected Bitmap doInBackground(String... urls) {
String urldisplay = urls[0];
Bitmap mIcon11 = null;
try {
try{
InputStream in = new java.net.URL(urldisplay).openStream();
mIcon11 = BitmapFactory.decodeStream(in);
} catch(OutOfMemoryError e){
}
} catch (Exception e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}
return mIcon11;
}
protected void onPostExecute(Bitmap result) {
bmImage.setImageBitmap(result);
}
}
答案 0 :(得分:0)
BitmapFactory.Options options = null;
options = new BitmapFactory.Options();
options.outHeight = IMAGE_WIDTH_HEIGHT;//give some value
options.outWidth = IMAGE_WIDTH_HEIGHT;//which is suitable for your app image size
BitmapFactory.decodeStream(is, outPadding, options); //try this
答案 1 :(得分:0)
您所看到的是硬件加速的影响。系统尝试将极大的位图加载到图像视图中。如果你打开了硬件加速(例如通过Manifest),android将尝试将位图放入openGL纹理,并且你的图像太大了。如果你为此使用JPEG或位图并不重要,因为最终的openGL纹理将具有原始数据,因此是一种位图(每个像素都表示为它自己的浮点值)。
您唯一的机会是将图像下载得更小或在设备上调整大小。我会选择较小的下载,因为它还会保存用户的带宽(因此也会节省成本)