2017-12-30 29 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

@MorrisonChang 했어. 도움이되지 못했습니다. –

+0

'ImageView'를 위해 크기가 조정 된 비트 맵을 만들 때 저장하지 않는 것처럼 저장/공유 코드에 올바른 비트 맵을 전달하고 있습니까? –

답변

0

감사하지만 @MorrisonChang 지적, 내가 전달되지 않았습니다로 일했다 고품질의 비트 맵을 저장/공유 할 수 있습니다.