К сожалению я не могу использовать структуры BITMAPFILEHEADER, BITMAPINFOHEADER, так как программа должна без проблем пересобираться под Linux.
Я попытался сделать так:
QByteArray BMPFile;
BMPFile[0] = 0x42; // Тип файла. Указывается "B"
BMPFile[1] = 0x4D; // Тип файла. Указывается "M"
// Считать по little-endian - младший байт располагается в памяти по меньшему адресу
// Записывать по big-endian - старший байт располагается в памяти по меньшему адресу
BMPFile[2] = 0x76; // Размер файла
BMPFile[3] = 0x37; // Размер файла
BMPFile[4] = 0x10; // Размер файла
BMPFile[5] = 0x00; // Размер файла
BMPFile[6] = 0x00; // Зарезервированное место под байты равные 0x00
BMPFile[7] = 0x00; // Зарезервированное место под байты равные 0x00
BMPFile[8] = 0x00; // Зарезервированное место под байты равные 0x00
BMPFile[9] = 0x00; // Зарезервированное место под байты равные 0x00
// Количество байт до байт относящихся к картинки
BMPFile[10] = 0x36; // Смещение
BMPFile[11] = 0x00; // Смещение
BMPFile[12] = 0x00; // Смещение
BMPFile[13] = 0x00; // Смещение
// Длина заголовка равняется всегда 40 (0х28)
BMPFile[14] = 0x28;
BMPFile[15] = 0x00;
BMPFile[16] = 0x00;
BMPFile[17] = 0x00;
// Щирина изображения, пикселы (720 пикселов)
BMPFile[18] = 0xD0;
BMPFile[19] = 0x02;
BMPFile[20] = 0x00;
BMPFile[21] = 0x00;
// Высота изображения, пикселы (492 пикселов)
BMPFile[22] = 0xEC;
BMPFile[23] = 0x01;
BMPFile[24] = 0x00;
BMPFile[25] = 0x00;
// Количество плоскостей
BMPFile[26] = 0x01;
BMPFile[27] = 0x00;
// Количество бит на пиксель (24 бит)
BMPFile[28] = 0x18;
BMPFile[29] = 0x00;
// Тип сжатия (без сжатия)
BMPFile[30] = 0x00;
BMPFile[31] = 0x00;
BMPFile[32] = 0x00;
BMPFile[33] = 0x00;
// Размер изображения в байтах (1 062 720)
BMPFile[34] = 0x40;
BMPFile[35] = 0x37;
BMPFile[36] = 0x10;
BMPFile[37] = 0x00;
// Горизонтальное разрешение, точки на метр
BMPFile[38] = 0x00;
BMPFile[39] = 0x00;
BMPFile[40] = 0x00;
BMPFile[41] = 0x00;
// Вертикальное разрешение, точки на метр
BMPFile[42] = 0x00;
BMPFile[43] = 0x00;
BMPFile[44] = 0x00;
BMPFile[45] = 0x00;
// Число используемых цветов (0 - максимально возможное для данной глубины цвета)
BMPFile[46] = 0x00;
BMPFile[47] = 0x00;
BMPFile[48] = 0x00;
BMPFile[49] = 0x00;
// Число основных цветов
BMPFile[50] = 0x00;
BMPFile[51] = 0x00;
BMPFile[52] = 0x00;
BMPFile[53] = 0x00;
mydata1.prepend(BMPFile);
for(int i = 54; i <= mydata1.size(); i = i + 3)
{
mydata1.insert(i+1, mydata1.at(i));
mydata1.insert(i+1, mydata1.at(i));
}
Этот цикл зависает всю программу. Пытаюсь его сделать в отдельном потоке, но у меня пока проблема, как передать в slot переменную mydata1. Вот это я пока не понимаю.