createdibsection



Автор Hunter задал вопрос в разделе Другие языки и технологии

Как использ-ть параметр ppvBits в функции CreateDIBSection, чтобы заполнить bitmap пикселями? Нужен пример на Visual С++ и получил лучший ответ

Ответ от .Сергей цукп[гуру]
ppvBits [out]
A pointer to a variable that receives a pointer to the location of the DIB bit values.
Источник: MSDN

Ответ от Modern Иванов[гуру]
Когда-то заморачивался. Может поможет.
HBITMAP CreateDibSect(HWND window,HDC hMemDC)
{
//Получаем прямоугольную область экрана
RECT windowRect;
GetClientRect(window, &windowRect);

//Размеры битмэпа
int bitmap_dx = windowRect.right-windowRect.left;
int bitmap_dy = windowRect.bottom-windowRect.top;
int byteinline=((bitmap_dx*24+31)/32)*4;
//заполняем данные по параметрам битмэпа
BITMAPINFOHEADER bmpInfoHeader;
BITMAPFILEHEADER bmpFileHeader;

bmpFileHeader.bfType = 0x4d42;
bmpFileHeader.bfSize = 0;
bmpFileHeader.bfReserved1 = 0;
bmpFileHeader.bfReserved2 = 0;
bmpFileHeader.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);

bmpInfoHeader.biSize = sizeof(bmpInfoHeader);
bmpInfoHeader.biWidth = bitmap_dx;
bmpInfoHeader.biHeight = bitmap_dy;
bmpInfoHeader.biPlanes = 1;
bmpInfoHeader.biBitCount = 24;
bmpInfoHeader.biCompression = BI_RGB;
bmpInfoHeader.biSizeImage = bitmap_dx*bitmap_dy*(24/8);
bmpInfoHeader.biXPelsPerMeter = 0;
bmpInfoHeader.biYPelsPerMeter = 0;
bmpInfoHeader.biClrUsed = 0;
bmpInfoHeader.biClrImportant = 0;

BITMAPINFO info;
info.bmiHeader = bmpInfoHeader;

BYTE* memory; //массив пикселов
memory=new BYTE[ bitmap_dx*bitmap_dy*(24/8)];
HDC bmpDC = CreateCompatibleDC(hMemDC);

//Создаем битмэп
HBITMAP bitmap = CreateDIBSection(bmpDC, &info, DIB_RGB_COLORS, (void**)&memory, NULL, 0);
//закрашиваем пикселы синим цветом (фон)
const COLORREF blue=RGB(255,0,0);
for(int y=0;y < bitmap_dy;y++)
{
for(int x=0;x < bitmap_dx;x++)
{
int row=y;
int col=3*x;
memory[row* byteinline+col]=GetRValue(blue);
memory[row* byteinline+col+1]=GetGValue(blue);
memory[row* byteinline+col+2]=GetBValue(blue);

}
}
DeleteDC(bmpDC);
return bitmap; //возвращаем дескриптор созданной DIB-секции
}

Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с ответами на Ваш вопрос: Как использ-ть параметр ppvBits в функции CreateDIBSection, чтобы заполнить bitmap пикселями? Нужен пример на Visual С++
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*