如何从ARGB_8888位图绘制位图

时间:2014-06-25 05:08:38

标签: android bitmap android-canvas crop

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

查看图片: enter image description here

在这个法师我在画布上绘制路径,我正在创建透明位图,根据startX,最低Y和最高X,最高Y

Bitmap cropBitmap =Bitmap.createBitmap(sourceBitmap,startX,lowestY,highestX,highestY);

当我裁剪Bitmap时我想要“测试”绘图裁剪位图。但是它给出了空位图。喜欢这个

enter image description here

在红色框内部,无论我在画布上绘制什么,我都希望从透明位图中裁剪位图。

1 个答案:

答案 0 :(得分:1)

您不能简单地创建透明位图,并假设位图边界内的任何内容已成为其中的一部分,这意味着像素是相同的。您的假设存在两个问题,即数字1,透明位图无效,因为透明度用作透视位图,只有alpha值,数字2,用路径绘制的数据,与之无关你的位图数据,你最初创建一个没有颜色的位图,除了它是完全透明的。

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

 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();

      }

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