2

我目前正在编写一个分配程序,该程序需要从标准 PNM P6 文件的左上角绘制一条完美的实心对角线(以便所有 x=y)。我对文件 I/O 没有任何问题。

但是,我无法正确显示对角线。不是我需要的从角落的单条实心白线,而是如图所示在图像上包裹的虚线。

有谁知道出了什么问题?

我的功能如下:

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; 
}
4

1 回答 1

1

你没有给出任何定义Image *img,所以实际上这个问题不能有把握地回答;但是,我假设您正在上与昨天编写 PNM P6 的问题相同的课程。

你在错误的方向上乘法。img->y保存图像的高度。但是,由于您需要span,您应该使用img->x-宽度- 以像素为单位下降i(然后添加j像素以向右移动)。

img->data[i*img->x+j].red=255; /* x, not y */

注意:这些属性的更好名称应该是widthheight

width注意:只在and的最小值上循环一次height并立即设置 pixel[i,j] 比测试哪个“具有”相同的 x 和 y 位置更容易和更快。

于 2014-05-13T08:42:33.017 回答