android - Android 在保存到 SQLITE 时更改像素或图像大小
问题描述
我知道这很常见,但这次我真的很困惑。我所需要的只是将 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()
它们不同的方法上,但是当我按照较小尺寸的代码进行操作时,作物将不再可用,我坚持使用此模块,任何人都可以帮助我吗?这对我帮助很大
解决方案
所以我只是添加了一堆代码来设置和替换图像像素的默认分辨率,因为我猜相机的图像分辨率的默认像素是3000x4000 pixel
所以你只需要设置 ImageView 的宽度和高度。所以我只是设置187x250
Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(),myUri);
mPreviewCashCard.setImageBitmap(Bitmap.createScaledBitmap(bitmap, 187, 250, false));
推荐阅读
- go - 如何等待一个恐慌的 goroutine?
- c# - C#:强制 TLS1.2 但 Https 服务器仍然给出常见算法错误
- excel - 在所有工作表上添加带有公式的新行
- python - 获取另一列中每个唯一值的列的最大值,分组到另一列
- c - C中指针的自由函数问题
- flutter - 在 Flutter 上获取容器的“y”位置
- r - 将图例和标签放入 dtwclust 图
- php - Nginx+php-fpm。静态网站 + WordPress
- javascript - 你如何将类映射到之前是 HTMLcollection 的数组
- python-3.x - 如何在树莓派 3 上制作 HC-SR04 超声波测距传感器?