Android 如何从ARGB_8888位图绘制位图

Android 如何从ARGB_8888位图绘制位图,android,bitmap,android-canvas,crop,Android,Bitmap,Android Canvas,Crop,我在画布上绘制路径并创建透明位图,同时从透明位图保存和创建裁剪位图 请参见图片: 在这个图像中,我在画布上绘制路径,并根据startX、lowestY和highestX、highestY创建透明位图 Bitmap cropBitmap =Bitmap.createBitmap(sourceBitmap,startX,lowestY,highestX,highestY); 当我裁剪位图时,我只需要“测试”绘制裁剪位图。但它给出的是空位图。像这样 在红色框内,我希望从透明位图中裁剪出我在画布上

我在画布上绘制路径并创建透明位图,同时从透明位图保存和创建裁剪位图

请参见图片:

在这个图像中,我在画布上绘制路径,并根据startX、lowestY和highestX、highestY创建透明位图

Bitmap cropBitmap =Bitmap.createBitmap(sourceBitmap,startX,lowestY,highestX,highestY);
当我裁剪位图时,我只需要“测试”绘制裁剪位图。但它给出的是空位图。像这样


在红色框内,我希望从透明位图中裁剪出我在画布上绘制的任何位图。

您不能简单地创建一个透明位图,并假设位图边界内的任何内容都已成为它的一部分,这意味着像素是相同的。您的假设有两个问题,第一,透明位图没有帮助,因为透明位图只具有alpha值,第二,使用路径绘制的数据,与位图的数据没有相关性,您最初创建的位图没有颜色,除了它是完全透明的

以下是实现此任务的正确方法的一般代码:

 class myDrawingView extends View() {
      // all your class members you initialize here
      @Override
      public void onDraw(Canvas canvas) {
          // get your width and height using startx, starty, highestx, highesty, lowesty
          Bitmap buffer = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
          canvas.setBitmap(buffer);
          canvas.drawPath(//draw your path here);
          invalidate();

      }

名为buffer的位图现在是所有图形的帧缓冲区,因此您可以绘制路径,该路径将在定义的缓冲区上渲染。你可以看到没有使用透明度,我们只是简单地创建了一个没有指定像素的位图,一旦你通过画布绘制到它,你的位图像素将是你绘制的任何东西。

查看位图文档。创建位图(位图,int,int,int,int,int)是的,就像这样,只有我从源位图创建位图。这不是一种方法吗,从源位图创建新位图的方法是什么?请参阅最后两个参数。我根据highestX和highestY使用的最后两个参数的意思是,我从highestX中减去startingX,从highestY中减去lowestY。例如:(highestX startX)和(highestY lowestY),我将结果值添加到最后两个参数中。