Привет народ... У меня очередная головная боль... Вот решила поменять в своём коде 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;
};
Работает оочень шустро.. НО оказывается что он одни анимированные гифы отображает правильно и цвета и координаты а другие оочень криво..!!! ну софсем криво..! краски черно-белые... и всё на перекосяк. . . От размера и разрешения не зависит... ГУРУ откликнитесь — у кого-нить была такая проблема..??? почему такое безобразие происходит ???