技术咨询:为何这段C#代码无法生成棋盘格图案?
问题分析与修正方案
你的这段代码无法生成棋盘格,核心问题出在颜色切换的逻辑错误,另外还有几个小细节需要调整,我来逐一拆解:
1. 颜色切换逻辑的核心问题
当前代码里,你每画一个像素就切换一次颜色,这会导致:
- 第一行的颜色顺序是:黑→白→黑→白...
- 第二行的第一个像素会因为第一行最后一个像素是白,所以切换成黑,最终第二行的顺序也是黑→白→黑→白...
- 最终画出来的是竖条纹,而不是棋盘格。
棋盘格的正确逻辑应该是:每行的起始颜色和上一行相反,或者更简单的判断方式——根据(currentX + currentY)的奇偶性来选择颜色:当和为偶数时用一种颜色,奇数时用另一种。
2. 其他需要修正的小问题
- 代码里的
bitmapHeight和bitmapWidth没有定义,你应该直接使用Bitmap本身的Height和Width属性,或者直接写8(因为你创建的是8x8的图)。 - 使用
do-while循环在这里没必要,for循环会让逻辑更清晰易读。
修正后的代码
// 直接创建Bitmap并赋值给变量,避免类型转换的麻烦 Bitmap bmp = new Bitmap(8, 8); pbImage.Image = bmp; for (int currentX = 0; currentX < bmp.Width; currentX++) { for (int currentY = 0; currentY < bmp.Height; currentY++) { // 根据x+y的奇偶性判断颜色,生成棋盘格 Color color = (currentX + currentY) % 2 == 0 ? Color.Black : Color.White; bmp.SetPixel(currentX, currentY, color); } } pbImage.Refresh();
逻辑解释
- 对于每个像素
(currentX, currentY),当currentX + currentY是偶数时,我们用黑色;奇数时用白色。 - 这样每一行的起始颜色都会和上一行相反:比如第一行x=0时,y从0到7,颜色是黑、白、黑...;第二行x=1时,y从0到7,颜色是白、黑、白...,完美符合棋盘格的样式。
内容的提问来源于stack exchange,提问作者user2257918
相关产品推荐
相关产品推荐

