2012-06-12 3 views
2

내 안드로이드 응용 프로그램에서 비트 맵을 가지고 있으며이 비트 맵에서 자른 다른 비트 맵을 만들고 싶습니다. 즉, 원래 비트 맵에서 특정 부분을 가져 오려고합니다.원본 비트 맵에서 자른 비트 맵 만들기

나는 Bitmap.createBitmap(Bitmap source, int x, int y, int width, int height) 를 사용하고 있지만 대가로 얻을 이미지가 확대 될 것으로 보인다.

가 어떤 이유가 될 수있다, 나는이 문제를 어떻게 해결할 수 있습니다? 당신이 가서 여기

+1

드로어 블에서 setBounds (0, 0, width, height)를 사용합니까? – Sanandrea

답변

1

Bitmap.createBitmap (비트 맵 원본, int x, int y, int 너비, int 높이)이 올바른 방법입니다. 나는 당신이 매개 변수를 잘못 사용하고있는 것 같아.

예. img라는 100x100 비트 맵의 ​​가운데 50x50 픽셀을 얻으려면 다음을 사용하십시오.

Bitmap.createBitmap (img, 25, 25, 50, 50);

1

내 조언 : IMAGES_WIDTH 및 IMAGES_HEIGHT 원래 PNG와 W, H의 크기입니다

r = this.getContext().getResources(); 
Drawable copyFrom= r.getDrawable(R.drawable.OriginalPNG); 
Bitmap b1 = Bitmap.createBitmap(IMAGES_WIDTH, IMAGES_HEIGHT,Bitmap.Config.ARGB_8888); 
Canvas canvas = new Canvas(b1); 


copyFrom.setBounds(0, 0, IMAGES_WIDTH, IMAGES_HEIGHT); 
copyFrom.draw(canvas); 

Bitmap copyTo; 

copyTo = Bitmap.createBitmap(copyFrom, x, y, W, H); 

이 영역의 크기입니다 복사하고 싶습니다. x 및 y는 원래 PNG에서 복사를 시작할 위치를 지정합니다. x, y를 모두 0으로 놓는 것은 왼쪽 상단 모서리부터 시작한다는 것을 의미합니다.

0
Rect re=new Rect(350, 150, 350, 150); 



    public void takePicture(final String fileName) { 
    Log.i(TAG, "Tacking picture"); 
    PictureCallback callback = new PictureCallback() { 

     private String mPictureFileName = fileName; 

     @Override 
     public void onPictureTaken(byte[] data, Camera camera) { 
      Log.i(TAG, "Saving a bitmap to file"); 
      Bitmap picture = BitmapFactory.decodeByteArray(data, 0, data.length); 
      Bitmap finalBitmap = Bitmap.createBitmap(picture, 850, 500, 960, 720); 

      try { 


       FileOutputStream out = new FileOutputStream(mPictureFileName); 
       finalBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out); 
       finalBitmap.recycle(); 
       mCamera.startPreview(); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }; 

    mCamera.takePicture(null, null, callback); 

} 
관련 문제