提问人:Lenarolla 提问时间:7/29/2023 最后编辑:HudsonLenarolla 更新时间:7/30/2023 访问量:83
如何从数组计算索引 [已关闭]
How to calculate index from array [closed]
问:
我想计算哪个索引保存包含位图数据的向量内的 X/Y 坐标数据。
int receiveBitmapCoordinateIndex(int x, int y, int bmp_width, int bmp_height) {
int final = 0;
// Y
final += bmp_width * (bmp_height - y);
// X
final += x - 1;
return final;
//((((bmp_height)-(y)) * bmp_width) + x);
}
int main()
{
std::cout <<"Should be: 249 999 func:" << receiveBitmapCoordinateIndex(1, 1, 500, 500) << "\n";
std::cout << "Should be: 249 998 func:" << receiveBitmapCoordinateIndex(2, 1, 500, 500) << "\n";
std::cout << "Should be: 0 func: " << receiveBitmapCoordinateIndex(500, 500, 500, 500) << "\n";
system("pause");
}
向量的大小为 500 * 500 = 250 000,但第一个索引为 0,最后一个索引为 249 999。
位图数据是颠倒的,这意味着 X:1 Y:1 将是 249 999,我的数学做错了什么?
我试着改变数学,但我似乎无法让它工作,老实说,我不确定我做错了什么。
答:
0赞
knoxgon
7/30/2023
#1
对于位图数据,调整函数以减去并保持不变。y
bmp_height + 1
x
Pixel (1,1)
对应于数组的末尾,(width、height)对应于数组的开头。
int receiveBitmapCoordinateIndex(int x, int y, int bmp_width, int bmp_height) {
int final = 0;
// Y
//final += bmp_width * (bmp_height - y);
final += bmp_width * (bmp_height + 1 - y); //<---- here
// X
//final += x - 1;
final += x; //<---- here
// Subtracting one because array indexing starts from 0
final -= 1;
return final;
}
int main()
{
std::cout << "Should be: 249 999 func: " << receiveBitmapCoordinateIndex(1, 1, 500, 500) << "\n";
std::cout << "Should be: 249 998 func: " << receiveBitmapCoordinateIndex(2, 1, 500, 500) << "\n";
std::cout << "Should be: 0 func: " << receiveBitmapCoordinateIndex(500, 500, 500, 500) << "\n";
system("pause");
}
评论
0赞
Lenarolla
7/30/2023
感谢@knoxgon还显示我做错了哪些细节。
评论
size_t receiveBitmapCoordinateIndex(size_t x, size_t y, size_t bmp_width, size_t bmp_height) { return x + (bmp_height - 1 - y) * bmp_width; }
x
y
final
result