Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java android位图低质量问题_Java_Android_Xml_Bitmap - Fatal编程技术网

Java android位图低质量问题

Java android位图低质量问题,java,android,xml,bitmap,Java,Android,Xml,Bitmap,我刚刚创建了一些函数从相机中拍摄照片,并将结果图像放入imageview。我发现我的照片质量太差了 以下是一些代码: @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) { Bitm

我刚刚创建了一些函数从相机中拍摄照片,并将结果图像放入imageview。我发现我的照片质量太差了

以下是一些代码:

 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) {
            Bitmap photo = (Bitmap) data.getExtras().get("data");
            picture.setImageBitmap(photo);
        }
    }

View.OnClickListener camerabtnlistener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            startActivityForResult(cameraIntent, CAMERA_REQUEST);
        }
    };


@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_admin_help_3);
        btnPicture = (Button) findViewById(R.id.btnPicture);
        picture= (ImageView) findViewById(R.id.picture);
        mToolbar = (Toolbar) findViewById(R.id.toolbar);
        layoutPic = (RelativeLayout) findViewById(R.id.layoutPic);
        setSupportActionBar(mToolbar);

        getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_HOME, ActionBar.DISPLAY_SHOW_CUSTOM);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setHomeButtonEnabled(true);

        btnPicture.setOnClickListener(camerabtnlistener);

    }
还有xml

<ImageView
            android:id="@+id/picture"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:src="@drawable/test_admin_big"
            android:adjustViewBounds="true"/>

我已经在下面尝试了这些解决方案,但不起作用

  • 请告知


    感谢您使用Bundle extras=data.getExtras();在onActivityResult中,它将返回缩略图图像而不是实际图像

    下面是我用来捕获和保存相机图像并将其显示到imageview的代码

    您必须将相机图像保存到特定位置,然后从该位置提取

    下面是打开“捕获摄影机图像”活动的方法

    private static final int CAMERA_PHOTO = 111;
    private Uri imageToUploadUri;
    
    private void captureCameraImage() {
            Intent chooserIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            File f = new File(Environment.getExternalStorageDirectory(), "POST_IMAGE.jpg");
            chooserIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f));
            imageToUploadUri = Uri.fromFile(f);
            startActivityForResult(chooserIntent, CAMERA_PHOTO);
        }
    
    那么您的onActivityResult()方法应该是这样的

      @Override
            protected void onActivityResult(int requestCode, int resultCode, Intent data) {
                super.onActivityResult(requestCode, resultCode, data);
    
                if (requestCode == CAMERA_PHOTO && resultCode == Activity.RESULT_OK) {
                    if(imageToUploadUri != null){
                        Uri selectedImage = imageToUploadUri;
                        getContentResolver().notifyChange(selectedImage, null);
                        Bitmap reducedSizeBitmap = getBitmap(imageToUploadUri.getPath());
                        if(reducedSizeBitmap != null){
                            imageview.setImageBitmap(reducedSizeBitmap);
                        }else{
                            Toast.makeText(this,"Error while capturing Image",Toast.LENGTH_LONG).show();
                        }
                    }else{
                        Toast.makeText(this,"Error while capturing Image",Toast.LENGTH_LONG).show();
                    }
                } 
            }
    
    下面是onActivityResult()中使用的getBitmap()方法


    我希望有帮助

    只需创建您自己的文件夹,并在为相机创建意图时提供其uri,例如:
    Intent Intent=newintent(android.provider.MediaStore.ACTION\u IMAGE\u CAPTURE);
    fileUri=getOutputMediaFileUri.getOutputMediaFileUri(媒体类型图像);
    intent.putExtra(MediaStore.EXTRA_输出,fileUri);
    
    startActivityForResult(intent,0)

    谢谢,我现在知道我使用缩略图在imageview中显示,所以我使用了您建议的实际图像。谢谢此错误:未能找到用户0的提供程序;应为此授权找到有效的ContentProvider
    private Bitmap getBitmap(String path) {
    
            Uri uri = Uri.fromFile(new File(path));
            InputStream in = null;
            try {
                final int IMAGE_MAX_SIZE = 1200000; // 1.2MP
                in = getContentResolver().openInputStream(uri);
    
                // Decode image size
                BitmapFactory.Options o = new BitmapFactory.Options();
                o.inJustDecodeBounds = true;
                BitmapFactory.decodeStream(in, null, o);
                in.close();
    
    
                int scale = 1;
                while ((o.outWidth * o.outHeight) * (1 / Math.pow(scale, 2)) >
                        IMAGE_MAX_SIZE) {
                    scale++;
                }
                Log.d("", "scale = " + scale + ", orig-width: " + o.outWidth + ", orig-height: " + o.outHeight);
    
                Bitmap b = null;
                in = getContentResolver().openInputStream(uri);
                if (scale > 1) {
                    scale--;
                    // scale to max possible inSampleSize that still yields an image
                    // larger than target
                    o = new BitmapFactory.Options();
                    o.inSampleSize = scale;
                    b = BitmapFactory.decodeStream(in, null, o);
    
                    // resize to desired dimensions
                    int height = b.getHeight();
                    int width = b.getWidth();
                    Log.d("", "1th scale operation dimenions - width: " + width + ", height: " + height);
    
                    double y = Math.sqrt(IMAGE_MAX_SIZE
                            / (((double) width) / height));
                    double x = (y / height) * width;
    
                    Bitmap scaledBitmap = Bitmap.createScaledBitmap(b, (int) x,
                            (int) y, true);
                    b.recycle();
                    b = scaledBitmap;
    
                    System.gc();
                } else {
                    b = BitmapFactory.decodeStream(in);
                }
                in.close();
    
                Log.d("", "bitmap size - width: " + b.getWidth() + ", height: " +
                        b.getHeight());
                return b;
            } catch (IOException e) {
                Log.e("", e.getMessage(), e);
                return null;
            }
        }