2012-12-12 144 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

编辑回答。 –