2017-12-30 16 views
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にあります。

それから私は、コードの下にそれを通じ保存または共有しています:

  1. それを通じ共有:

    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")); 
    
  2. それを通じ保存:

    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; 
    } 
    

保存中または共有中の画像の品質は非常に低く(ビット単位)、ギャラリーには表示されません。

主な質問

- 保存/共有を通じて、非常に高品質のイメージを持っている方法>

と私は...私は、ビットマップの品質を改善するための使用している方法が最善の方法であるかどうかを

+0

JPEGはロッシーな画像形式ですが、PNGを試しましたか? –

+0

@モリスンチャンしました。あまり助けなかった。 –

+0

'ImageView'用にサイズ変更されたビットマップを作成したときに保存していないように、正しいビットマップを保存/共有コードに渡してもよろしいですか? –

答えて

0

感謝を知らないが、@MorrisonChangで指摘したように、それは働いていた、私は渡していませんでしたメソッドを保存/共有する高品質のビットマップのサイズ変更。

関連する問題