我目前正在为一个任务编写一个程序,它要求从一个标准的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 */

注意:这些属性的更好名称应该是widthheight
注意:在widthheight的最小值上只循环一次并立即设置像素[i,j]比测试哪个“具有”相同的x和y位置更容易和更快。

10-08 03:12