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 我真的不知道他们为什么有大小不同,我认为问题出在crop
或Pickcamera()
方法上,它改变了图像的大小?这可能吗?
更大的
较小的
更大尺寸的代码图片点击按钮后转到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?