Я пишу код для изменения размера файлов BMP. Некоторые файлы корректно изменяют размеры, а некоторые нет. В чем моя ошибка?
Я помещаю оригинальный RGB в массив, уже изменяю его размер по горизонтали, и пытаюсь записать массив "n" раз, чтобы выгрузить его. Также я ставлю abs (biHeight) на случай, если он будет отрицательным.
bi.biWidth*=n;
bi.biHeight*=n;
int padding1 = (4 - (bi.biWidth * sizeof(RGBTRIPLE)) % 4) % 4;
bi.biSizeImage = (bi.biWidth* sizeof(RGBTRIPLE) + padding1) * abs(bi.biHeight);
bf.bfSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + (bi.biWidth * sizeof(RGBTRIPLE) + padding1) * abs(bi.biHeight);
int biWidth = bi.biWidth/n;
int biHeight =abs (bi.biHeight/n);
// write outfile's BITMAPFILEHEADER
fwrite(&bf, sizeof(BITMAPFILEHEADER), 1, outptr);
// write outfile's BITMAPINFOHEADER
fwrite(&bi, sizeof(BITMAPINFOHEADER), 1, outptr);
//arrey for pic
RGBTRIPLE pic[biWidth*n];
// determine padding for scanlines
int padding = (4 - (biWidth * sizeof(RGBTRIPLE)) % 4) % 4;
// iterate over infile's scanlines
for (int i = 0; i < biHeight; i++)
{
int p=0;
// iterate over pixels in scanline
for (int j = 0; j < biWidth; j++)
{
// temporary storage
RGBTRIPLE triple;
// read RGB triple from infile
fread(&triple, sizeof(RGBTRIPLE), 1, inptr);
//conwerting to n pixels in scanlines
for(int t=0;t<n;t++)
{
pic[p]=triple;
p++;
}
}
//writing pic for n
for (int h=0;h<n;h++)
fwrite(&pic,sizeof(pic),1,outptr);
// skip over padding, if any
fseek(inptr, padding, SEEK_CUR);
// then add it back (to demonstrate how)
for (int k = 0; k < padding1; k++)
{
fputc(0x00, outptr);
}
}
Я ожидаю получить правильно измененный размер образа файла, но он работает не для всех файлов
:) Существуют resize.c и bmp.h.
:) resize.c компилируется.
:) не изменяет размер small.bmp, когда n равно 1
:( корректно изменяет размер small.bmp, когда n равно 2
Byte 20 of pixel data doesn't match. Expected 0x00, not 0xff
:( правильно изменяет small.bmp, когда n равно 3
Byte 29 of pixel data doesn't match. Expected 0x00, not 0xff
:) правильно изменяет размер small.bmp, когда n равно 4
:( правильно изменяет small.bmp, когда n равно 5
Byte 47 of pixel data doesn't match. Expected 0x00, not 0xff
:) корректно изменяет размер large.bmp, когда n равно 2
:) корректно изменяет размер smiley.bmp, когда n равно 2
:) правильно изменяет размер smiley.bmp, когда n равно 3