我正在尝试调整位图文件的大小。该文件只是从命令提示符中获取的常规文件,它采用一个整数,该整数决定文件的大小,并且一旦获取,将被处理并输出该文件的大小调整图像。我觉得我很亲近,但亲近并不总是重要的。这是我的密码:

for (int i = 0, BHeight=abs(bi.biHeight);i<BHeight; i++)
{
    buffer = malloc(sizeof(RGBTRIPLE) * bi.biWidth);

    // iterate over pixels in scanline
    for (int j = 0; j < bi.biWidth; j++)
    {
        fread(&triple, sizeof(RGBTRIPLE), 1, inptr);
        // temporary storage
        for (int k=0; i<factor;k++)
        {
            buffer[k]=triple;
        }

    }    //iterate over each pixel factor times

    // write RGB triple to outfile
    for(int i=0;i<factor;i++)
    {
        fwrite(&buffer[i], sizeof(RGBTRIPLE),1,outptr);
    }
}

也许有人能指引我向正确的方向。而且,我故意没有把所有的代码都发出去。但是如果需要所有的东西来诊断这个问题,请告诉我。

最佳答案

你的I/O很可怕,你可能应该在开始处理之前把所有的图像加载到内存中。
大多数缩放算法都需要对相邻像素进行二维访问;一次缩放一条扫描线会导致无法正确过滤,并且会产生较差的结果。
当然,还必须修改位图文件的头文件,并在缩放后发出一个适当调整的头文件。

关于c - 需要帮助调整位图文件的大小,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15828071/

10-12 15:00
查看更多