已知宽高时,从字节数组计算坐标的X与Y值
字节数组遍历像素坐标的解决方案
嘿,我来帮你理清Y坐标的计算逻辑!你已经找对了X坐标的计算方式——x = i % width,这个完全没问题,因为每一行有width个像素,取模运算刚好能定位到当前像素在该行的横向位置。
那Y坐标其实就藏在整数除法里:把当前索引i除以宽度width,直接取商(舍去小数部分),得到的就是当前像素所在的行号(也就是Y坐标)。比如宽度是10的话,索引15除以10得1,对应第2行(如果Y从0开始计数,这也是绝大多数图像库的默认规则,包括你用的SetPixel)。
另外你的代码里有个小坑要修正:循环条件应该是i < sender.Count(),而不是<=,不然会越界访问数组最后一个元素之后的位置。
修正后的完整代码示例:
for (int i = 0; i < sender.Count(); i++) { // 计算X、Y坐标 int x = i % width; int y = i / width; // 整数除法,自动丢弃小数部分 Color c = pal[sender[i]]; bmp.SetPixel(x, y, c); }
举个例子帮你理解
假设宽度是4(每行4个像素),索引和坐标的对应关系如下:
- i=0 → x=0, y=0
- i=1 → x=1, y=0
- i=2 → x=2, y=0
- i=3 → x=3, y=0
- i=4 → x=0, y=1
- i=5 → x=1, y=1
...
每过width个索引,Y坐标就加1,正好对应一行的像素数量,整数除法完美匹配这个规律。
最后提个小细节:如果你的图像坐标系是Y轴向上(很少见,大部分像Bitmap这样的库都是Y轴向下),那你需要用height - 1 - y来反转Y坐标,但一般情况下不需要额外处理。
内容的提问来源于stack exchange,提问作者tkrn
相关产品推荐
相关产品推荐

