我在View中有一个Bitmap。 这是我绘制它的代码:
@Override protected void onDraw(Canvas canvas) {
canvas.drawColor(0xFFCCCCCC);
int w = mBitmap.getWidth();
int h = mBitmap.getHeight();
float[] mVerts = {
0, 0,
w * 0.8f, 0,
0, h,
w, h * 0.7f
};
canvas.drawBitmapMesh(mBitmap, 1, 1, mVerts, 0, null, 0, null);
}
它看起来像这样:
现在,问题是:
如果我的图像具有某种形状和透明背景,我怎样才能找到覆盖该区域的多边形,如下所示:
然后我应该如何将所有这些点添加到位图网格中,这样我就可以让用户移动它们并像第一个例子那样操纵图像?
答案 0 :(得分:1)
我粗略的想法是去每个像素并检查颜色是否透明。
我们可以垂直遍历每条水平线。在任何水平线上,我们可以首先找到焦点图像的最左边界点,并在找到它时打破循环。现在在同一水平线上,我们可以找到焦点图像的最右边界点。您可以将所有这些边界像素(x,y)坐标添加到ArrayList
mVerts
。
像这样 -
for(int i=0;i<bitmap.getHeigth();i++){
for(int j=0;j<bitmap.getWidth();j++){
int pixel = bitmap.getPixel(i,j);
if(pixel != Color.TRANSPARENT){
mVerts.add(i);
mVerts.add(j);
break;
}
}
for(int j=bitmap.getWidth()-1; j>=0 ;j--){
int pixel = bitmap.getPixel(i,j);
if(pixel != Color.TRANSPARENT){
mVerts.add(i);
mVerts.add(j);
break;
}
}
}
您可以将此ArrayList mVerts
传递给canvas.drawBitmapMesh()
方法以提取焦点图像。
您可以使用以下内容来获取任何像素的颜色。来源 - here
int colorCode = imageView.getDrawingCache().getPixel(x, y);