Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблема с GetDIBits()  (Прочитано 5886 раз)
0 Пользователей и 1 Гость смотрят эту тему.
AlexCasual
Помогающий

by
Offline Offline

« : 14-09-2012 16:40 » 

Всем привет!
Столкнулся с проблемой при "растягивании" битмапов :

Код:
hdcSrc - hdc источника данных для картинки
....
HDC hdcDestI = CreateCompatibleDC(hdcSrc);
HBITMAP hbmOutput = CreateCompatibleBitmap(hdcSrc,nWidthSrc,nHeightSrc);
HBITMAP hbmOld = (HBITMAP)SelectObject(hdcDestI,hbmOutput);

int padding = 0;
while ( (nWidthDest * 3 + padding) % 4 != 0) padding++;

BITMAPINFO bmi;
bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);

int res1 = GetDIBits(hdcDestI,hbmOutput,0,0,NULL,&bmi,DIB_RGB_COLORS);

bmi.bmiHeader.biWidth = nWidthSrc;
bmi.bmiHeader.biHeight = nHeightSrc;
bmi.bmiHeader.biPlanes = 1;
bmi.bmiHeader.biBitCount = 24;
bmi.bmiHeader.biCompression = 0;
bmi.bmiHeader.biSizeImage = nHeightSrc*(nWidthSrc*3 + padding);
bmi.bmiHeader.biXPelsPerMeter = 0;
bmi.bmiHeader.biYPelsPerMeter = 0;
bmi.bmiHeader.biClrUsed = 0;
bmi.bmiHeader.biClrImportant = 0;

void* scanlines = new unsigned char[nHeightSrc*(nWidthSrc*3+padding)];

int res = GetDIBits(hdcDestI,hbmOutput,0,nHeightDest,scanlines,&bmi,DIB_RGB_COLORS);
res = StretchDIBits(MyCompatibleDC,nXOriginDest,nYOriginDest,nWidthDest,nHeightDest,nXOriginSrc,nYOriginSrc,nWidthSrc,nHeightSrc,scanlines,&bmi,DIB_RGB_COLORS,SRCCOPY);

SelectObject(hdcDestI,hbmOld);
DeleteObject(hbmOutput);
DeleteDC(hdcDestI);

После сохранения MyCompatibleDC в файл получаю ЧЁРНЫЙ квадрат...почему так может быть,где накосячил? Оригинальный контекст hdcSrc валидный...
Записан
zubr
Гость
« Ответ #1 : 14-09-2012 19:39 » new

AlexCasual, ну а что ты хочешь? Совместимый контекст создал, совместимый битмап создал, объект битмапа в объект контекста подключил, после чего хочешь получить какую то картинку, а там ведь одни нули, то бишь квадрат Малевича. Вот если бы ты после этого скопировал (BitBlt) hdcSrc в hdcDestI тогда...
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines