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