操作位图中居中圆外的区域,在C -建议?

cuxqih21  于 2023-06-05  发布在  其他
关注(0)|答案(1)|浏览(124)

我有一个8bit-bitmap 1440:1080的图像,上面有一个居中的圆圈。现在,我想操纵这个圈子之外的一切。该图像由指针*img指向。
我想用距离来做,就像下面的伪代码:

unsigned char* img;

for (l = 0; l < width; l++) {
    for (j = 0; j < height; j++) {
        if(sqrt(pow(x2-x1,2) + pow(y2-y1,2)) > radius ){
            *(img + j * width + l) = 0;
        }
    }
}

您可能已经注意到,我的问题是如何将x1,x2,y1,y2jl关联起来。
我想做一个这样的函数:

typedef struct {
    int x;
    int y;
} coord;

coord getCoords(int index, int width){
    coord output;
    output.y=0;
    while(index>=width){
        index=index-width;
        output.y+=1;
    }
    output.x=index;
    return output;
}

输入的index就是j * width + l,我想知道它是否在圆内。中心像素是[720,540],或者更精确地说是[720.5,540.5]。
我说错了吗?还是有更好的办法?

PS:在函数内部创建坐标的局部变量,并在函数内部进行数学运算(距离计算)并返回bool会更简单。而不是创建新类型的变量。

zzlelutf

zzlelutf1#

使用

pow(l-xc, 2) + pow(j-yc, 2) > pow(radius, 2)

相关问题