1
QRコードのビットマップを生成しているアプリケーションを開発していますが、問題があります。次のQRコードの生成ビットマップは、保存/共有用のビットマップの品質を改善する
private static Bitmap getResizedBitmap(Bitmap bm, int newWidth, int newHeight, boolean isNecessaryToKeepOrig) {
int width = bm.getWidth();
int height = bm.getHeight();
float scaleWidth = ((float) newWidth)/width;
float scaleHeight = ((float) newHeight)/height;
// CREATE A MATRIX FOR THE MANIPULATION
Matrix matrix = new Matrix();
// RESIZE THE BIT MAP
matrix.postScale(scaleWidth, scaleHeight);
// "RECREATE" THE NEW BITMAP
Bitmap resizedBitmap = Bitmap.createBitmap(bm, 0, 0, width, height, matrix, false);
if(!isNecessaryToKeepOrig){
bm.recycle();
}
return resizedBitmap;
}
と、この使用して上記のメソッドを呼び出す:以下のコードを使用して、それを改善
imageView.setImageBitmap(getResizedBitmap(myBitmap,1000,1000,true));
上記の方法を使用することにより、品質は非常に向上していると私は非常に高品質のQRコードを見ることができます以前のものとは異なりimageView
にあります。
それから私は、コードの下にそれを通じ保存または共有しています:
それを通じ共有:
String timeStamp = new SimpleDateFormat("ddMMyyyy_HHmm").format(new Date()); String mImageName="QR-"+ timeStamp +".jpg"; String bitmapPath = MediaStore.Images.Media.insertImage(getContentResolver(), myBitmap,mImageName, "QR code Generated"); Uri bitmapUri = Uri.parse(bitmapPath); Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("image/jpg"); intent.putExtra(Intent.EXTRA_STREAM, bitmapUri); startActivity(Intent.createChooser(intent, "Share"));
それを通じ保存:
private void storeImage(Bitmap image) { File pictureFile = getOutputMediaFile(); if (pictureFile == null) { Log.d(TAG, "Error creating media file, check storage permissions: ");// e.getMessage()); return; } try { FileOutputStream fos = new FileOutputStream(pictureFile); image.compress(Bitmap.CompressFormat.JPEG,100,fos); fos.flush(); fos.close(); Toast.makeText(ImagePopUp.this,"Barcode Saved!!!",Toast.LENGTH_LONG).show(); } catch (FileNotFoundException e) { Log.d(TAG, "File not found: " + e.getMessage()); } catch (IOException e) { Log.d(TAG, "Error accessing file: " + e.getMessage()); } } private File getOutputMediaFile(){ File mediaStorageDir = new File(Environment.getExternalStorageDirectory() + "/Pictures"); if (! mediaStorageDir.exists()){ if (! mediaStorageDir.mkdirs()){ return null; } } // Create a media file name String timeStamp = new SimpleDateFormat("ddMMyyyy_HHmm").format(new Date()); String mImageName="QR-"+ timeStamp +".jpg"; File mediaFile; mediaFile = new File(mediaStorageDir.getPath() + File.separator + mImageName); return mediaFile; }
保存中または共有中の画像の品質は非常に低く(ビット単位)、ギャラリーには表示されません。
主な質問
- 保存/共有を通じて、非常に高品質のイメージを持っている方法>?
と私は...私は、ビットマップの品質を改善するための使用している方法が最善の方法であるかどうかを
JPEGはロッシーな画像形式ですが、PNGを試しましたか? –
@モリスンチャンしました。あまり助けなかった。 –
'ImageView'用にサイズ変更されたビットマップを作成したときに保存していないように、正しいビットマップを保存/共有コードに渡してもよろしいですか? –