2012-12-12 141 views
0

我有一個類,我把佈局的屏幕截圖存儲爲一個JPEG文件....我遇到的問題是圖像大小因屏幕分辨率而異。例如。如果我使用中等分辨率手機,圖像大小約爲50-60kb,但對於高分辨率則高達1.5mbs ....所以有什麼辦法可以保持圖像大小不變,而不受屏幕尺寸或分辨率的影響?製作一個屏幕截圖代碼支持多種屏幕尺寸

public class abc extends Activity { 
    View content; 
    String fileName, fname; 
    static File file; 
    static String RECE; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.rece); 
     ImageView iv = (ImageView) findViewById(R.id.Ivsignature); 
     iv.setImageBitmap(Signature.sign); 
     Initialize(); 

     content = findViewById(R.id.Rlrece); 
     ViewTreeObserver vto = content.getViewTreeObserver(); 
     vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
      @SuppressWarnings("deprecation") 
      public void onGlobalLayout() { 
       content.getViewTreeObserver() 
         .removeGlobalOnLayoutListener(this); 
       getScreen(); 
      } 
     }); 

    } 

    private void getScreen() { 
     View view = content; 
     View v = view.getRootView(); 
     v.setDrawingCacheEnabled(true); 
     Bitmap b = v.getDrawingCache(); 

     String myPath = Environment.getExternalStorageDirectory() + "/Rece"; 
     File myDir = new File(myPath); 
     try { 
      myDir.mkdirs(); 
     } catch (Exception e) { 
     } 

     fname = fileName + ".jpg"; 
     file = new File(myDir, fname); 
     FileOutputStream fos = null; 
     try { 
      fos = new FileOutputStream(file); 
      b.compress(CompressFormat.JPEG, 100, fos); 
      // Toast.makeText(getApplicationContext(), fname + " saved", 
      // Toast.LENGTH_LONG).show(); 
      Intent my = new Intent(getApplicationContext(), 
        DialogActivity.class); 
      my.putExtra("Rsystrace", DialogActivity.Systrace); 
      startActivityForResult(my, 1); 
     } catch (Throwable ex) { 
      Toast.makeText(getApplicationContext(), 
        "error: " + ex.getMessage(), Toast.LENGTH_LONG).show(); 

     } 
    } 
+0

http://developer.android.com/training/multiscreen/screensizes.html –

+0

我正在採取屏幕截圖,並將其保存爲一個文件....我希望文件大小不變.. – Audi

回答

0

當你做屏幕截圖的時候,你將會有依賴於屏幕尺寸的圖像(圖像分辨率因屏幕不同而不同)。

您可以根據需要壓縮或調整位圖大小,並在調整大小爲固定大小後將文件大小固定。

PS。我建議你使用JPEG以外的PNG。

+0

如果我把圖像放入一個固定的位圖,然後保存該文件???如果有任何方法做這個? – Audi

+2

檢查此問題http://stackoverflow.com/questions/4837715/how-to-resize-a-bitmap-in-android – dilix

0

您可以創建一個對象BitmapFactory.Options(),並在給定縮放因子(您將需要計算此值)中設置給定尺寸的屬性。 比你可以像在BitmapFactory.decodeFile()中使用想要的大小的圖像(基於inSampleSize)。

- 編輯 -

實施例在 「photoPath」 在盤使用圖像:

BitmapFactory.Options bmOptions = new BitmapFactory.Options(); 
    BitmapFactory.decodeFile(photoPath, bmOptions); 

    int photoW = bmOptions.outWidth; 
    int photoH = bmOptions.outHeight; 

    int scaleFactor = Math.min(newWidth/width, newHeigth/heigth); 
    bmOptions.inSampleSize = scaleFactor; 

    Bitmap bitmap = BitmapFactory.decodeFile(photoPath, bmOptions); 

    ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
    bitmap.compress(Bitmap.CompressFormat.JPEG, 90, bytes); 
    FileOutputStream fos; 
    fos = new FileOutputStream(photoPath); 
    fos.write(bytes.toByteArray()); 
    fos.close(); 
+0

可以例如嗎? – Audi

+0

編輯回答。 –