当我在android中使用Bitmap压缩图像时,我收到错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当我在android中使用Bitmap压缩图像时,我收到错误相关的知识,希望对你有一定的参考价值。

我正在使用意图捕获图像并发送到我的服务器,但是当我捕获图像和压缩然后一些移动设备我得到bitmap.compress错误。那么如何解决这个问题呢,这是我的代码

BitmapFactory.Options options = new BitmapFactory.Options();
        options.inSampleSize = 8;
        Bitmap bitmap = BitmapFactory.decodeFile(fileUri.getPath(), options);


        File f = new File(fileUri.getPath());

        OutputStream outputStream = null;
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);
        outputStream = new FileOutputStream(f);
        outputStream.flush();
        outputStream.close();

        ImageView image = new ImageView(I_kycActivity.this);
        image.setLayoutParams(new android.view.ViewGroup.LayoutParams(250, 250));
        image.setMaxHeight(400);
        image.setMaxWidth(400);
        image.setPadding(5, 5, 5, 5);
        image.setImageBitmap(bitmap);


        if (phototype.equals("Photo")) {
            img_photo.setImageBitmap(bitmap);
            txtphote.setText(f.getName());
            imgUrl.add(f.getPath());
        }

而错误是

12-30 15:33:23.485 9564-9564 / com.riya.product.intranet W / System.err:java.lang.NullPointerException:尝试调用虚方法'boolean android.graphics.Bitmap.compress(android.graphics。位图$ CompressFormat,int,java.io.OutputStream)'在空对象引用12-30 15:33:23.487 9564-9564 / com.riya.product.intranet W / System.err:at com.riya.product。 salestracker.I_kycActivity.previewCapturedImage(I_kycActivity.java:1124)12-30 15:33:23.488 9564-9564 / com.riya.product.intranet W / System.err:at com.riya.product.salestracker.I_kycActivity.onActivityResult( I_kycActivity.java:1257)12-30 15:33:23.488 9564-9564 / com.riya.product.intranet W / System.err:at android.app.Activity.dispatchActivityResult(Activity.java:6919)12-30 15 :33:23.488 9564-9564 / com.riya.product.intranet W / System.err:at android.app.ActivityThread.deliverResults(ActivityThread.java:4174)12-30 15:33:23.488 9564-9564 / com。 riya.product.intranet W / System.err:在android.app.ActivityThread.handleSendResult(ActivityThread.ja) va:4221)12-30 15:33:23.488 9564-9564 / com.riya.product.intranet W / System.err:at android.app.ActivityThread.-wrap20(ActivityThread.java)12-30 15:33: 23.488 9564-9564 / com.riya.product.intranet W / System.err:at android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1583)12-30 15:33:23.488 9564-9564 / com.riya .product.intranet W / System.err:at android.os.Handler.dispatchMessage(Handler.java:110)12-30 15:33:23.488 9564-9564 / com.riya.product.intranet W / System.err:在android.os.Looper.loop(Looper.java:203)12-30 15:33:23.488 9564-9564 / com.riya.product.intranet W / System.err:at android.app.ActivityThread.main(ActivityThread .java:6251)12-30 15:33:23.488 9564-9564 / com.riya.product.intranet W / System.err:at java.lang.reflect.Method.invoke(Native Method)12-30 15:33 :23.488 9564-9564 / com.riya.product.intranet W / System.err:at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1075)12-30 15:33:23.488 9564- 9564 / com.riya.product.intranet W / System.err:at com.android .internal.os.ZygoteInit.main(ZygoteInit.java:936)

答案

更换

OutputStream outputStream = null; 

OutputStream outputStream = new FileOutputStream(f); 
另一答案

问题是这一行

 bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);

outputStream在这一点上是null,所以将它作为compress方法中的参数传递产生NullPointerException

首先需要初始化它,然后才能将其作为参数传递。好像你在下一个声明中初始化了outputStream。该行应在以下声明之前。

bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);

更改

OutputStream outputStream = null;
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);
outputStream = new FileOutputStream(f);

OutputStream outputStream = new FileOutputStream(f);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);

以上是关于当我在android中使用Bitmap压缩图像时,我收到错误的主要内容,如果未能解决你的问题,请参考以下文章

Bitmap图片压缩

Bitmap对图像的处理

Android中处理大图片时图片压缩

将图像位图添加到简单适配器 Android

android 图片质量压缩和尺寸压缩有啥区别

Android Bitmap压缩策略