2013-01-06 20 views
0

餘米服用的Android屏幕截圖,並使用canvas.drawBitmap拍攝的圖像(水印)上繪製另一個圖像,canvas.drawBitmap給出了兩種不同的結果

這一切給予正確的結果,當我複製的水印(另一個圖像 - 說SD卡上visit.jpg)圖像,所拍攝的圖像具有寬度塗鴉外連語法,其中visit.jpg有寬度 - 339pixels,

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

,但我不希望水印圖像複製到SD卡,我想來自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

編輯:我忘了一個簡單的方法,把圖像/ RES /繪製-nodpi文件夾。

Android將根據您的屏幕密度自動縮放資源圖像。默認的可繪製文件夾對應於mdpi,所以如果你有一個hdpi設備,圖像將被放大。你可以把圖像插入/ RES /生/文件夾,然後打開它想:

Uri imageUri = Uri.parse("android.resource://your.app.package/raw/visit"); 
InputStream is = context.getContentResolver().openInputStream(imageUri); 
Bitmap bmp = BitmapFactory.decodeStream(is, null, opts); 
相關問題