我目前正在为一个任务编写一个程序,它要求从一个标准的PNM P6文件的左上角画一条黑色的直线,使其完全呈实心对角线(这样所有x=y)我对文件I/O没有问题。
但是,我无法正确显示对角线与我需要的从角落开始的单条、实线和白线不同,我得到的是环绕图像的虚线,如this picture所示。
有人知道出什么事了吗?
我的职责如下:
Image *
DiagonalWhite(Image *img)
{
int i, j;
for (i = 0; i < img->x; i++)
{
for (j=0; j < img->y; j++)
{
if (i==j)
{
img->data[i*img->y+j].red=255;
img->data[i*img->y+j].green=255;
img->data[i*img->y+j].blue=255;
}
}
}
return img;
}
最佳答案
你没有给Image *img
下任何定义,所以实际上这个问题不能自信地回答;但是,我假设你在上昨天的Issues writing PNM P6课。
你在错误的方向上繁殖img->y
保持图像的高度但是,由于需要范围,您应该使用img->x
--宽度--向下移动i
像素(然后添加j
像素向右移动)。
img->data[i*img->x+j].red=255; /* x, not y */
注意:这些属性的更好名称应该是
width
和height
。注意:在
width
和height
的最小值上只循环一次并立即设置像素[i,j]比测试哪个“具有”相同的x和y位置更容易和更快。