Т.е. с 1,8,12,24,32 битами. Для работы с 32 есть следущий код но в нём присутствует неувязочка:
//////////////////////////////////////////////////////////////////////////////// ///////////////////////////
#include <qpainter.h>
#include <qcolor.h>
#include "bmpstruct.h"
QPainter *p = new QPainter();
int file_bmp; //дескриптор файла
tagBITMAPFILEHEADER bmpFileHeader;
tagBITMAPINFOHEADER bmpInfoHeader;
tagRGBQUAD pixel;
void mainwindow::drow()
{
p -> begin (this);
file_bmp = open (Path -> text(), O_RDONLY);
read (file_bmp, &bmpFileHeader, 14); //считывание заголовка файла
read (file_bmp, &bmpInfoHeader, 40); //считывание заголовка изображения
for (int y = bmpInfoHeader.biHeight; y > 0; y--)
{
for (int x = 0; x < bmpInfoHeader.biWidth; x++)
{
read (file_bmp, &pixel, sizeof(tagRGBQUAD));
p -> setPen(QColor((int)pixel.rgbBlue,(int)pixel.rgbGreen,(int)pixel.rgbRed));
p -> drawPoint(x,y);
}
}
p -> end();
}
//////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////
/////////////////////////////// bmpstruct.h //////////////////////////////////////////////////////////
#include <fcntl.h> //Необходимо для работы системной функции открытия файлов
#include <unistd.h> //Необходимо для работы системной функции чтения файлов
#include <iostream.h> //необходим для cout
#pragma pack(push,1)
typedef unsigned long DWORD; // Двойное слово - 32 бита (разряда)
typedef unsigned short WORD; // Слово - 16 бит (разрядов)
typedef signed long LONG;
typedef unsigned int UINT;
// Заголовок файла
typedef struct tagBITMAPFILEHEADER
{
WORD bfType; // 'BM' = 4D42h
DWORD bfSize;
UINT bfReserved1;
UINT bfReserved2;
DWORD bfOffBits; // Смещение к растру
};
// Заголовок Bitmap
typedef struct tagBITMAPINFOHEADER
{
DWORD biSize;
LONG biWidth;
LONG biHeight;
WORD biPlanes;
WORD biBitCount;
DWORD biCompression;
DWORD biSizeImage;
LONG biXPelsPerMeter;
LONG biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
};
//структура пиксела
typedef struct tagRGBQUAD
{
char rgbBlue;
char rgbGreen;
char rgbRed;
char rgbReserved;
};
#pragma pack(pop)
//////////////////////////////////////////////////////////////////////////////// /////////////////////////////
а именно при выводе наблюдаются искажения цвета, т.е. к примеру чёрный и зелёный выводятся нормально а синий и красный неверно , вместо них другие цвета (похоже на негатив или что-то в этом духе). А с другой битностью вообще цирк. Если пытаться прочесть файл указанной выше программой, то вместо цветов наблюдается подобие чернобелого изображения ну не совсем но похож на это с эфектом разлиновости. Да к тому же появляется не одно а несколько изображений к примеру вместо одного шара четыре.
Ответ на:
комментарий
от cyclon
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от arkhivania
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Segmentation fault при чтении файла. (2003)
- Форум Привидите пожалуйсто рабочий код или покажите ошибку. (2003)
- Форум Запись структуры в файл (2014)
- Форум Почему не накладывается текстура? (2003)
- Форум [c++] кто тупит — я или g++? что скажут владельцы icc? (2010)
- Форум CPL3, Protected mode need help. (2005)
- Форум Изменение цвета пикселей в простой программе по копированию bmp файла (2016)
- Форум Почему не видно устройства, и как исправить это? (2017)
- Форум [X11]Не могу понять, где по-нормальному объявлена структура Display (2011)
- Форум Всё ли нормально в символьном устройстве? (2017)