【问题标题】:How to draw Bitmap from ARGB_8888 Bitmap如何从 ARGB_8888 位图绘制位图
【发布时间】:2014-06-25 05:08:38
【问题描述】:

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

查看图片:

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

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

当我裁剪位图时,我只想“测试”绘制裁剪位图。但它给出的是空位图。像这样

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

【问题讨论】:

  • 查看 Bitmap.createBitmap(Bitmap, int, int, int, int) 的文档
  • 是的,好像只有我从源位图创建位图。这不是一种方法吗?那么,从源位图创建新位图的方法是什么?
  • 查看最后两个参数
  • 我根据最高 X 和最高 Y 采用的最后 2 个参数在这里意味着我从最高 X 中减去开始X,从最高 Y 中减去最低 Y。例如:(highestX-startX) 和 (highestY-lowestY),我将结果值添加到最后 2 个参数中。就像我正在做的那样。

标签: android bitmap android-canvas crop


【解决方案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();

      }

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

【讨论】:

    猜你喜欢
    • 2015-11-01
    • 2014-01-20
    • 2014-10-23
    • 2013-08-07
    • 2010-09-23
    • 2020-04-28
    • 2010-12-05
    • 1970-01-01
    相关资源
    最近更新 更多