2016-02-11 60 views
1

我的應用程序有一個功能,讓用戶捕捉照片並在該照片上添加繪圖。Android畫布沒有繪製超過屏幕尺寸

所有照片的尺寸都精確到900 x 900。 允許用戶將圖形添加到圖像。我通過original image保留transparent image並在透明圖像上進行繪製。繪圖使用canvas完成。

但是,在具有720 x 480(高x寬)的設備中繪圖時。如果我創建一個900 x 900透明圖像並從0,0900,900畫一條線,則畫布只畫一條從0,0480,480的線。

下面是代碼的相應部分:

準備帆布:

holder = getHolder(); 
if (holder.getSurface().isValid()) { 

    Canvas canvas = holder.lockCanvas(); 
    canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR); 
    /* original image is 900 x 900 */ 
    overlayBitmap = Bitmap.createBitmap(originalImage.getWidth(), originalImage.getHeight(), originalImage.getConfig()); 
    canvas.setBitmap(overlayBitmap); 
} 

圖Line:

canvas.drawLine(0, 0, 900, 900, paint); 

我爲什麼我有這個不知道問題。這是因爲使用canvas ??有什麼解決辦法嗎?任何幫助,高度讚賞:-)

回答

0

一些更多的閱讀經過約canvas,也從this後我能解決這個問題有所幫助。

問題出在canvas clip rectangle。默認爲(0,0,480,480),因爲設備顯示爲720 x 480我猜?所以無論在位圖上總是被剪裁到480 x 480

後來我修改了代碼:

holder = getHolder(); 
if (holder.getSurface().isValid()) { 

    Canvas canvas = holder.lockCanvas(); 
    canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR); 
    /* original image is 900 x 900 */ 
    overlayBitmap = Bitmap.createBitmap(originalImage.getWidth(), originalImage.getHeight(), originalImage.getConfig()); 
    canvas.setBitmap(overlayBitmap); 

    /* set extended clip rectangle for the larger target bitmap */ 
    Rect clipRect = canvas.getClipBounds(); 
    clipRect.set(0, 0, image.getWidth(), image.getHeight()); 
    canvas.clipRect(clipRect, Region.Op.REPLACE); 

} 

圖像尺寸替換剪裁矩形大小一切工作就好了。

0

只是因爲照片是900x900,這並不意味着它是這些人恰恰是許多像素在設備屏幕上顯示時。設備屏幕可具有非常不同的尺寸,並且當圖像(或就此而言的任何視圖)被告知要擴大與以適應屏幕,或在DP測量(設備無關的像素),設備的像素的實際數量將根據設備屏幕而異。

您的代碼需要對這些差異敏感。當你做繪畫時,不要假定視圖畫布的大小。相反,請問視圖有多大,並根據實際測量的大小執行所有繪圖。

+0

感謝但添加的代碼僅用於測試目的。 –

+0

我不知道這意味着什麼。我在一般意義上解釋了爲什麼你的線條沒有按預期的尺寸繪畫。請作出努力,明白它的意思爲Android設備有不同大小的像素。 –