2013-01-06 3 views
0
I 안드로이드 화면의 스크린 샷을 취하고 canvas.drawBitmap을 이용하여 촬영 화상 (워터 마크)에 다른 이미지를 그릴있어

,canvas.drawBitmap 두 가지 결과

모두 나 워터 마크를 복사 할 때 적절한 결과를 제공하는 (다른 이미지를 제공 - SD 카드에 visit.jpg) 이미지를 말한다 캡처 된 이미지가

File file = new File(Environment.getExternalStorageDirectory() + "/visit.jpg"); 
Bitmap myBitmap = BitmapFactory.decodeFile(file.getAbsolutePath()); 

, visit.jpg는 폭 - 339pixels이 폭 500pixel을 가지고하지만 난 SDCARD에 워터 마크 이미지를 복사 할 해달라고, 내가 원하는 res 폴더의 이미지는 캡처 한 이미지에 그려야하므로 사용했습니다

Bitmap visit = BitmapFactory.decodeResource(getApplicationContext().getResources(),R.drawable.visit); 

캔버스에 그려서 저장하면 저장되지만 워터 마크 이미지 (visit.jpg)는 늘어나고 크기는 339 픽셀보다 커집니다. 왜 ?

내 코드는 다음과 같습니다

 View v1 = findViewById(android.R.id.content).getRootView(); 
     v1.setDrawingCacheEnabled(true); 
     Bitmap screenshot = Bitmap.createBitmap(v1.getDrawingCache()); 

     Bitmap cropimg = Bitmap.createBitmap(screenshot, 50, 0, screenshot.getWidth()-100, 592); 
     v1.setDrawingCacheEnabled(false); 


     Bitmap Rbitmap = Bitmap.createBitmap(cropimg).copy(Config.ARGB_8888, true); 


     Bitmap visit = BitmapFactory.decodeResource(getApplicationContext().getResources(),R.drawable.visit); // image accessed from drawable 
     Canvas canvas = new Canvas(Rbitmap);  

     File file = new File(Environment.getExternalStorageDirectory() + "/visit.jpg"); // the image copied on sd card 
     Bitmap myBitmap = BitmapFactory.decodeFile(file.getAbsolutePath()); 

     canvas.drawBitmap(visit, 0, 570, null); // if i put myBitmap instead of visit i.e. canvas.drawBitmap(myBitmap, 0, 570, null); then visit.jpg image gets draw properly with 339pixel width without strtch 
     canvas.save(); 
+0

을하지만 당신은''BitmapFactory.decodeResource (..., BitmapFactory를 사용하여 시도 할 수 있습니다 : 당신은 같은 오픈 후/입술/원시/폴더에 이미지를 넣을 수 있습니다. 옵션)''Options.inScaled''가 false로 설정되었는지 확인하십시오. – harism

+0

아니, 그건 작동하지 않았다. – SML

+0

'visit.getWidth()'와'visit.getHeight()'을 사용해 비트 맵이 늘어 났는지 또는 나중에 발생하는지 확인하십시오. – Jave

답변

1

편집 : 나는, 쉬운 방법을 잊어/입술/당김-nodpi 폴더에 이미지를 넣어.

Android는 화면 밀도에 따라 리소스 이미지를 자동으로 조정합니다. 기본 드로어 블 폴더는 mdpi에 해당하므로 hdpi 장치가 있으면 이미지의 크기가 커집니다. 나는이 주제에 대한 전문가가 아니에요

Uri imageUri = Uri.parse("android.resource://your.app.package/raw/visit"); 
InputStream is = context.getContentResolver().openInputStream(imageUri); 
Bitmap bmp = BitmapFactory.decodeStream(is, null, opts); 
관련 문제