【问题标题】:Captured Image show black color in imageView捕获的图像在 imageView 中显示为黑色
【发布时间】:2017-01-12 16:58:40
【问题描述】:

我一直在寻找很多教程来找出将图像保存到SQLite 的最佳方法。最后我决定获取imagePath并保存到SQLite,并将捕获的图像显示到ImageView

    private void activeTakePhoto() {
            ContentValues values = new ContentValues();
            values.put(MediaStore.Images.Media.TITLE, "Image File name");
             mCapturedImageURI = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
            Intent intentPicture = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            intentPicture.putExtra(MediaStore.EXTRA_OUTPUT, mCapturedImageURI);
            startActivityForResult(intentPicture, REQUEST_IMAGE_CAPTURE);
        }

 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK) {
            switch (requestCode) {
                case REQUEST_IMAGE_CAPTURE:
                    try {
                       String selectedImage = getRealPathFromURI(mCapturedImageURI);
                        imageView.setImageDrawable(Drawable.createFromPath(selectedImage));
                    } catch (Exception e) {
                        Toast.makeText(getApplication(),"Failed",Toast.LENGTH_SHORT).show();
                    }
                    break;

                case RESULT_LOAD_IMAGE:
                    //
                    break;
            }
        }
    }

public String getRealPathFromURI(Uri contentUri)
    {
        try
        {
            String[] proj = {MediaStore.Images.Media.DATA};
            Cursor cursor = managedQuery(contentUri, proj, null, null, null);
            int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
            cursor.moveToFirst();
            return cursor.getString(column_index);
        }
        catch (Exception e)
        {
            return contentUri.getPath();
        }
    }

我做了一个小测试来打印 selectedImage 并显示值,但我的 imageView 是黑色的。

【问题讨论】:

标签: android sqlite uri


【解决方案1】:

试试这个代码:

捕获图像:

private void activeTakePhoto() {
Intent imageLoader = (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT)
        ? new Intent(MediaStore.ACTION_IMAGE_CAPTURE_SECURE)
        : new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(imageLoader, REQUEST_IMAGE_CAPTURE);
}

处理请求:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    //super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK) {
        switch (requestCode) {
            case REQUEST_IMAGE_CAPTURE:
                try {
                    imageView.setImageBitmap((Bitmap) data.getExtras().get("data"));
                } catch (Exception e) {
                    Toast.makeText(getApplication(),"Failed",Toast.LENGTH_SHORT).show();
                }
                break;

            case RESULT_LOAD_IMAGE:
                //
                break;

            default: 
                // 'not RESULT_OK' or any other case
                super.onActivityResult(requestCode, resultCode, data);
                break;
        }
    }
}

【讨论】:

  • 谢谢,您的回答有效。如何将其保存到 SQLite 中?哪个变量?
  • 要保存到SQlite,首先从ImageView中获取Bitmap,转换成字节,保存到SQLite。变量现在是位图。如果回答有帮助,请点赞并接受:)
【解决方案2】:

试试这个代码:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (RESULT_OK == resultCode) {

       if (REQUEST_IMAGE_CAPTURE == requestCode && data != null) {
            Bundle extras = data.getExtras();
            if (extras != null && extras.containsKey("data")) {
                Bitmap bitmap = (Bitmap) extras.get("data");
                if (bitmap != null) 
                         imageView.setImageBitmap(bitmap);
                    else
                        Toast.makeText(getApplication(),"Failed",Toast.LENGTH_SHORT).show();
                }
            }
        } 
    }

如果你想使用 uri

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK) {
        switch (requestCode) {
            case REQUEST_IMAGE_CAPTURE:
                try {
                    Uri selectedImage = data.getData();
                    String[] filePathColumn = { MediaStore.Images.Media.DATA };
                    Cursor cursor = getContentResolver().query(selectedImage,filePathColumn, null, null, null);
                    cursor.moveToFirst();
                    int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
                    String picturePath = cursor.getString(columnIndex);
                    cursor.close();
                    imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath));
                } catch (Exception e) {
                    Toast.makeText(getApplication(),"Failed",Toast.LENGTH_SHORT).show();
                }
                break;

            case RESULT_LOAD_IMAGE:
                //
                break;
        }
    }
}

【讨论】:

  • 图片会不会看起来很模糊?
  • 如果我想使用 URI 而不是位图?
  • 我收到Failed
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-18
  • 1970-01-01
相关资源
最近更新 更多