Привет народ... У меня очередная головная боль... Вот решила поменять в своём коде GetPixel на GetDIBits и заменила ... Код | HBITMAP bmp; //Грузим из файла в DDB bmp = m_hBitmap; SelectObject(m_hMemDC, bmp); //Назначаем DC для нашего битмапа tagBITMAP bmInfo; GetObject(bmp, sizeof(bmInfo), &bmInfo); //Получаем инфу о DDB
BITMAPINFO DIBInfo; memset(&DIBInfo, 0, sizeof(DIBInfo)); //Готовим структуру для создания DIB.
DIBInfo.bmiHeader.biWidth = bmInfo.bmWidth; DIBInfo.bmiHeader.biHeight = bmInfo.bmHeight; DIBInfo.bmiHeader.biPlanes = 1; // всегда 1 DIBInfo.bmiHeader.biCompression = BI_RGB; // без компрессии DIBInfo.bmiHeader.biBitCount = 24; // три байта на пиксель DIBInfo.bmiHeader.biSize = sizeof(DIBInfo.bmiHeader); DIBInfo.bmiHeader.biXPelsPerMeter = 132; // пикселей на метр, гор. DIBInfo.bmiHeader.biYPelsPerMeter = 132; // пикселей на метр, верт. DIBInfo.bmiHeader.biClrUsed = 0;
BYTE* pBits = NULL; //тут будет растр DIB HBITMAP dib = NULL; //Хендл DIB вдруг понадобится :)
//Создаем пустой DIB в памяти на основе установленых параметров. //dib = CreateDIBSection(m_hMemDC, &DIBInfo, DIB_RGB_COLORS, (VOID**)&pBits, 0, 0); pBits = new BYTE [132*132*3];
//Конвертируем DDB в DIB указанного формата. int gg=GetDIBits(m_hMemDC, bmp, 0, bmInfo.bmHeight - 1, pBits, &DIBInfo, DIB_RGB_COLORS); rgb arr[132][132]; int c = 0;int a=0; for (int i = 0; i < bmInfo.bmWidth; i++) { for (int j = 0; j < bmInfo.bmHeight; j++) { COLORREF cr = GetPixel(m_hMemDC,j,i); arr[i][j].r = GetRValue(cr); arr[i][j].g = GetGValue(cr); arr[i][j].b = GetBValue(cr); //Это конечный массив if((pBits[c] != arr[i][j].r) && (pBits[c+1] != arr[i][j].g) && (pBits[c+2] != arr[i][j].b)) { a++; } c += 3; } } a=0; //GETFIRSTTICK();
//GETSECONDTICKMESSAGE();
/////////////////////////////////////////////////////// c=0; for (int i = 0; i < bmInfo.bmHeight; i++) { int k = 0; unsigned int x1,y; unsigned char buff[267];
buff[0] = 267; buff[1] = 1; buff[2] = i;
for (int j = 0; j < bmInfo.bmWidth; j++) { x1=0; y=pBits[c+2]; y>>=3; y&=0x1F; y<<=11; x1+=y;
y=pBits[c+1]; y>>=3; y&=0x3f; y<<=6; x1+=y;
y=pBits[c]; y>>=3; y&=0x1f; x1+=y; y=x1;
y>>=8;
y&=0xff; buff[k+3]=(unsigned char) (y); y=x1; y&=0xff;
buff[k+4]=(unsigned char) (y);
k = k + 2; c += 3; } x.Write(0,buff,267);//Пишем в порт растр } delete [] pBits; };
|
Работает оочень шустро.. НО оказывается что он одни анимированные гифы отображает правильно и цвета и координаты а другие оочень криво..!!! ну софсем криво..! краски черно-белые... и всё на перекосяк. . . От размера и разрешения не зависит... ГУРУ откликнитесь - у кого-нить была такая проблема..??? почему такое безобразие происходит ???
|