我是C ++的新手,并且认为我可能正在做一些我不应该使用指针的东西。我检查了大量的资源,但是找不到问题。经过一段时间的调试后,看起来这就是问题代码。
writeHeader(outFile, width, height);
for (int row=0; row < width+1; row++){ // row == 0 is the bottom row
for (int col=0; col < height+1; col++){ // col == 0 is the leftmost column
Color c = getPixel(row, col);
outFile.write((char*)c.blue, 1);
outFile.write((char*)c.green, 1);
outFile.write((char*)c.red, 1);
}
}
任何人都可以看到有什么问题吗?
getPixel方法如下所示。
Color BMPCanvas::getPixel(int x, int y){
if (x<=width && y<=height){
return image[y*width + x];
}
return Color(0,0,0);
}
编辑:我将上面的代码更改为:
for (int row=0; row < width; row++){ // row == 0 is the bottom row
for (int col=0; col < height; col++){ // col == 0 is the leftmost column
Color c = getPixel(row, col);
unsigned char green = c.green, blue = c.blue, red = c.red;
outFile.write((char*)&blue, 1);
outFile.write((char*)&green, 1);
outFile.write((char*)&red, 1);
}
}
我认为修复了其中一个问题,但我仍然遇到内存错误。绿色蓝色和红色表示涉及其颜色值的数字,例如(255,255,255)。
我非常感谢你的帮助。
答案 0 :(得分:2)
我最好的猜测是你有一个“一个接一个”的错误。 C ++数组是基于零的,所以当你有一个包含10个插槽的数组时,你会从0到9迭代,而不是从0到10。
尝试将getPixel更改为:
Color BMPCanvas::getPixel(int x, int y){
if (x<width && y<height){
return image[y*width + x];
}
return Color(0,0,0);
}
你的另一个循环:
for (int row=0; row < width; row++){ // row == 0 is the bottom row
for (int col=0; col < height; col++){ // col == 0 is the leftmost column