2016-07-25 90 views
1

我正在拍攝一張圖像並使用畫布將其繪製到屏幕上。我想根據屏幕尺寸縮放它。Android:如何使用畫布/繪製位圖來縮放位圖以適合屏幕尺寸?

這是我試過,但它切斷一大塊形象:

DisplayMetrics metrics = context.getResources().getDisplayMetrics(); 
int width = metrics.widthPixels; 
int height = metrics.heightPixels; 

Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(),R.drawable.myimage); 
bitmap = Bitmap.createScaledBitmap(bitmap, width, height, false); 

Rect frameToDraw = new Rect(0, 0, width, height); 
RectF whereToDraw = new RectF(0, 0, width, height); 

canvas.drawBitmap(bitmap,frameToDraw,whereToDraw, paint); 

我知道我現在做的幾件事情錯了,但我不完全相信。此代碼會導致圖像超出屏幕的大小。我希望它被縮放到屏幕的大小。我也將繪製較小的圖像,我還需要根據將縮放到屏幕大小,但不是全屏。

回答

0
Rect frameToDraw = new Rect(0, 0, width, height); 
RectF whereToDraw = new RectF(0, 0, width, height); 

看看上面的代碼。你沒有縮放圖片。你只是把圖片的一部分(在這裏是整張圖片)粘貼到某個地方(這裏是原始圖片的大小)。

frameToDraw矩形的寬度和高度應該是圖片的寬度和高度。

+0

所以我認爲*的「寬度」和「高度」變量*是我的屏幕尺寸。它們來自顯示指標。這是不正確的? – jagrakye

+0

我試圖設置我的位圖縮放到一個特定的大小,我看到的「frametodraw」完全相同的大小,然後設置繪製到我從顯示指標中獲取的高度和寬度的位置,但我仍然只看到正在抓取圖像的一部分 – jagrakye

+0

劃痕。我想我明白了。讓我嘗試一些其他的東西,並回到這個。 – jagrakye

0
DisplayMetrics metrics = context.getResources().getDisplayMetrics(); 
    int width = metrics.widthPixels; 
    int height = metrics.heightPixels; 

如果你這樣得到你的寬度和高度,你不會考慮任何工具欄/狀態欄/導航欄的大小。

如果您編碼具有View一個應用程序,膨脹與ImageView的佈局是全尺寸(即match_parent),然後使用scaleType縮放/ FIT /作物要如何圖像。

+0

我實際上需要以編程的方式來做,而不使用imageview – jagrakye

+0

除非我誤解。你是說只是從空的圖像視圖拉伸縮放信息? – jagrakye

+0

好吧,讓我們假設你試圖做的不僅僅是在屏幕上彈出一個圖像。如果我這樣做,我會有一個自定義的'View'子類並重載'onDraw'來完成畫布的繪製。這樣我可以使用視圖的大小和寬度和高度。我知道你必須重寫'onLayout'來初始化事物,因爲這是知道視圖大小的關鍵。 –

0

不需要科瑞規模的位圖,而不是:

Bitmap frameBuffer = Bitmap.createBitmap(frameBufferWidth,frameBufferHeight, Config.RGB_565); 

frameBufferWidthframeBufferHeight是你想使你的應用程序的基礎上的大小(例如480 * 800

那麼簡單添加此代碼:

Rect dstRect = new Rect(); 
canvas.getClipBounds(dstRect); // get canvas size base screen size 
canvas.drawBitmap(framebuffer, null, dstRect, null); 

它根據屏幕大小繪製您的最終位圖

相關問題