如何从 ARGB_8888 位图绘制位图
Posted
技术标签:
【中文标题】如何从 ARGB_8888 位图绘制位图【英文标题】:How to draw Bitmap from ARGB_8888 Bitmap 【发布时间】: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 个参数中。就像我正在做的那样。 【参考方案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();
称为缓冲区的位图,现在是您所有绘图的帧缓冲区,因此您可以绘制路径,并将在您定义的缓冲区上呈现。您会看到没有使用透明度,我们只是创建了一个没有分配像素的位图,一旦您通过画布绘制到它,您的位图像素将是您绘制的任何内容。
【讨论】:
以上是关于如何从 ARGB_8888 位图绘制位图的主要内容,如果未能解决你的问题,请参考以下文章