2017-08-06 110 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检查编辑的答案。 –