首页 > 解决方案 > Android 在保存到 SQLITE 时更改像素或图像大小

问题描述

我知道这很常见,但这次我真的很困惑。我所需要的只是将 BLOB 图像保存到 SQLite 并且我已经完成并将其保存到 SQLite,实际上,我在 SQLite 中有两个图像保存为 BLOB 我比较了它们,但我真的不知道另一个包含的差异3000X4000 pixels 2.72 MIB哪个更重,另一个更轻,182x250 50.81Kib这就是我真正想要的lightier size。我上传了两张图片,看看到底发生了什么

实际上,我一直在尝试开发文本图像识别。较大尺寸样本的图像,在捕获图像后应该裁剪并保存到 SQLite,而较小尺寸只是直接捕获图像并保存到 SQLite 现在它们具有保存功能以保存到 SQLite 我真的不知道他们为什么有不同的大小,我认为问题出在改变图像大小cropPickcamera()方法上?那可能吗?。

更大的一个

在此处输入图像描述

较小的一个

在此处输入图像描述

单击按钮后较大尺寸的代码图像转到pickCamera()方法并将图像显示到另一个活动

   public void pickCamera() {
        ContentValues values = new ContentValues();
        values.put(MediaStore.Images.Media.TITLE, "NewPic");
        values.put(MediaStore.Images.Media.DESCRIPTION, "Image to Text");
        image_uri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,values);
        Intent cameraIntent = new Intent (MediaStore.ACTION_IMAGE_CAPTURE);
        cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, image_uri);
        startActivityForResult(cameraIntent, IMAGE_PICK_CAMERA_CODE);
    }

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK){
        if (requestCode == IMAGE_PICK_GALLER_CODE){
            CropImage.activity(data.getData()).setGuidelines(CropImageView.Guidelines.ON).start(this);
        }
        if (requestCode == IMAGE_PICK_CAMERA_CODE){

            CropImage.activity(image_uri).setGuidelines(CropImageView.Guidelines.ON).start(this);
        }
    }
    if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE){
        CropImage.ActivityResult result = CropImage.getActivityResult(data);
        if(resultCode ==RESULT_OK){
            Uri resultUri = result.getUri();
            resultUri.getPath();
            BitmapDrawable bitmapDrawable = (BitmapDrawable)mPreviewIv.getDrawable();
            Bitmap bitmap = bitmapDrawable.getBitmap();
            TextRecognizer recognizer = new TextRecognizer.Builder(getApplicationContext()).build();

            if(!recognizer.isOperational()){
                Toast.makeText(this,"Error",Toast.LENGTH_SHORT).show();
            }
            else{
                Frame frame = new Frame.Builder().setBitmap(bitmap).build();
                SparseArray<TextBlock> items = recognizer.detect(frame);
                StringBuilder sb = new StringBuilder();

                for (int i = 0; i<items.size(); i++){
                    TextBlock myItem = items.valueAt(i);
                    sb.append(myItem.getValue());
                    sb.append("\n");
                }
                Intent i = new Intent(ScanCashCard.this, ScannedDetails.class);

                //camera I want to display the image view to another Activity and save to SQLite

                i.putExtra("CashCardImage",image_uri.toString());
                startActivity(i);
            }
        }
    }
}

显示到另一个活动

 String resultUri = extras.getString("CashCardImage");
 Uri myUri = Uri.parse(resultUri);
 Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(),myUri);
 mPreviewCashCard.setImageBitmap(bitmap);

此代码来自较小的尺寸

public void pickcamera(){
            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            startActivityForResult(intent, 101);
}

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

    if (requestCode == 101){
        Bitmap bitmap = (Bitmap) data.getExtras().get("data");
        mPreview4PsId.setImageBitmap(bitmap);
    }
}

我认为问题出在pickCamera()它们不同的方法上,但是当我按照较小尺寸的代码进行操作时,作物将不再可用,我坚持使用此模块,任何人都可以帮助我吗?这对我帮助很大

标签: androiddatabasesqlite

解决方案


所以我只是添加了一堆代码来设置和替换图像像素的默认分辨率,因为我猜相机的图像分辨率的默认像素是3000x4000 pixel所以你只需要设置 ImageView 的宽度和高度。所以我只是设置187x250

Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(),myUri);
mPreviewCashCard.setImageBitmap(Bitmap.createScaledBitmap(bitmap, 187, 250, false));

推荐阅读