gpt4 book ai didi

android - 在位图图像中查找多边形

转载 作者:行者123 更新时间:2023-11-30 00:23:20 25 4
gpt4 key购买 nike

我在 View 中有一个位图。这是我绘制它的代码:

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

}

它看起来像这样:

enter image description here

现在,问题是:

如果我有一个具有某种形状和透明背景的图像,我怎样才能找到一个覆盖该区域并且看起来像这样的多边形:

enter image description here

然后我应该如何将所有这些点添加到位图网格,以便让用户移动它们并像第一个示例中那样操作图像?

最佳答案

我的粗略想法是遍历每个像素并检查颜色是否透明。我们可以垂直遍历到每条水平线。在任意一条水平线上,我们可以先找到焦点图像最左边的边界点,找到后打破循环。现在在同一条水平线上,我们可以找到焦点图像最右边的边界点。您可以将所有这些边界像素 (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);

关于android - 在位图图像中查找多边形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45876486/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com