Android 在保存到 SQLITE 时更改像素或图像大小

Posted

技术标签:

【中文标题】Android 在保存到 SQLITE 时更改像素或图像大小【英文标题】:Android change the pixel or the image size when saving to SQLITE 【发布时间】:2021-11-05 06:57:05 【问题描述】:

我知道这很常见,但这次我真的很困惑。我所需要的只是将 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() 方法上,它们有所不同,但是当我从较小尺寸遵循代码时,作物将不再可用,我坚持使用此模块,有人可以帮助我吗?这对我真的很有帮助

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于Android 在保存到 SQLITE 时更改像素或图像大小的主要内容,如果未能解决你的问题,请参考以下文章

Android中的Sugar ORM:更新SQLite中保存的对象

Datagridview 中的更改未保存在表 SQLite vb.net 中

当sqlite android片段中的数据更改或删除时如何刷新recyclerview?

Android:在 SQLite 中使用 UUID 作为主键

Android - 在 SQLite 数据库中保存位置

在 Android 的 SQLite 数据库中保存 ArrayList