位图很大,可以上传到纹理中

时间:2014-04-15 13:49:03

标签: java android bitmap

我有一个应用程序,可以上传相机拍摄的照片并将其上传到服务器。 但当我试图从服务器进入我的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);
    }
}

2 个答案:

答案 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纹理将具有原始数据,因此是一种位图(每个像素都表示为它自己的浮点值)。

您唯一的机会是将图像下载得更小或在设备上调整大小。我会选择较小的下载,因为它还会保存用户的带宽(因此也会节省成本)