2017-08-06 173 views
0

我有一個要求,就像在畫布中繪製某些內容並將其保存爲較大的圖像。截至目前,無論我在onDraw()方法中繪製並保存,它都會提供設備提供的圖像/畫布大小,比如538(w)/ 852(h)。我需要幾乎兩倍的圖像,大約1000(w)/ 1500(h)而不會失去分辨率。任何示例代碼,參考鏈接都會有幫助。提前致謝。在畫布中繪製並將其保存爲較大圖像

回答

0

一種方法是創建所需大小的位圖和借鑑它用帆布:

int w = 1000, h = 1500; 
Bitmap.Config conf = Bitmap.Config.ARGB_8888; 
Bitmap bmp = Bitmap.createBitmap(w, h, conf); 
Canvas canvas = new Canvas(bmp); 

最後,你將有你與你的圖紙和必要dimentions對bmp。

編輯::使用功能getDrawingCache()視圖的

@Override 
protected void onDraw(Canvas canvas) { 
    int w = 1000, h = 1500; 
    Bitmap.Config conf = Bitmap.Config.ARGB_8888; 
    Bitmap bmp = Bitmap.createBitmap(w, h, conf); 
    Canvas mycanvas = new Canvas(bmp); 
    super.onDraw(mycanvas); 

    ... 
} 
+0

同意,但目前無論我在做什麼,都在onDraw(Canvas c)中。如何將它保存到更大的圖像?是否需要使用您提供的代碼重新繪製並保存它? – dask

+0

瞭解,在這種情況下,您可以將當前畫布從父視圖類中取消鏈接,並將您創建的位圖與必要尺寸鏈接起來。 –

0

先得到位圖,然後縮放位圖按您的要求。

view.buildDrawingCache(); 
Bitmap bitmap = view.getDrawingCache(); 
//bitmap = bitmap.createScaledBitmap(..as your requirements..); 

編輯

您是說要在更高質量的圖像。您不能簡單地從較低質量的圖像獲得更高質量的圖像。但是,您可以應用位圖過濾來獲得稍好的質量。

Bitmap bitmap = getDrawingCache(); 
Bitmap output = Bitmap.createBitmap(/*width, height, bla bla bla*/); 
Canvas canvas = new Canvas(output); 
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG); 
Rect srcRect = new Rect(0,0,bitmap.getWidth(), bitmap.getHeight()); 
Rect destRect = new Rect(0,0,output.getWidth(), output.getHeight()); 
canvas.drawBitmap(bitmap, srcRect, destRect, paint); 
+0

縮放位圖會導致分辨率丟失,對嗎?我的要求是要獲得「良好的分辨率」,即使我看到這個圖像從任何其他第三方工具放大,如畫廊,imageviewer等。 – dask

+0

@dask檢查編輯的答案。 –

相關問題