Если я все верно понял - когда глубина цвета 1,4 или 8, то после заголовков файла и изображения следует палитра размером 2 ^ BitCount (глубина цвета) цветов. А после этой палитры следует индексы цветов палитры.
Вот функция чтения
int Image::loadpaletteimg(FILE *f)
{
int Palette_size = pow(2,BMInfoHeader.BitCount);//размер палитры - 2 в степени глубины цвета
Palette=new RGBQUAD[Palette_size];
for (int i = 0; i < Palette_size; i++) fread(&(Palette[i]),sizeof(RGBQUAD),1,f);//считываем палитру
Rgbquad=new RGBQUAD*[BMInfoHeader.Height];//cтолбцы
for (int i = 0; i < BMInfoHeader.Height; i++)//построчно записываем
{
Rgbquad[i]=new RGBQUAD[BMInfoHeader.Width];//строки
fread(Rgbquad[i], sizeof(RGBQUAD), BMInfoHeader.Width, f);
}
if(Rgbquad) cout<<"\nИзображение успешно загружено!"<<endl;
return 1;
}
А вот - для записи
void Image::writepaletteimg(FILE *f)
{
int Palette_size = pow(2,BMInfoHeader.BitCount);
for (int i = 0; i < Palette_size; i++)
{
fwrite(&(Palette[i]),sizeof(RGBQUAD),1,f);
//cout<<i<<endl;
}
cout<<"Палитра записана!"<<endl;
int size = BMInfoHeader.Height*BMInfoHeader.Width;
for (int i = 0; i < BMInfoHeader.Height; i++)
{
fwrite(Rgbquad[i], sizeof(RGBQUAD), BMInfoHeader.Width, f);
}
fclose(f);
return;
}
Я так понимаю, что проблема в моем двухмерном массиве, т.к для индексов он вроде как не нужен, но не совсем понимаю, что именно нужно изменить... Картинка пишется почти правильно, т.е ее можно прочитать, но вот в конец файла пишется какая-то гадость, забивая 70% картинки. Т.е если исходная картинка весит 9,05 КБ , то после перезаписи в моей программе - 32,8 КБ.
Как мне переписать, чтобы не записывало лишнего?