Проблема с DrawDibDraw
От: UJey Украина  
Дата: 22.06.03 11:59
Оценка:
Привет, всем!

Что я пытаюсь сделать:
Хочу загрузить BMP-картинку в память и нарисовать ее на поверхности DirectDrawSurface.
Битмапку гружу вручную (чтение заголовка, цветовых данных...)
Затем при помощи DrawDibDraw рисую изображение на поверхности.

В чем проблема:
По непонятным мне причинам, DrawDibDraw иногда вылетает со значением FALSE. При этом естественно ничего не рисуется!
Однако такое происходит не всегда!!! Иногда (как повезет) все проходит гладко...
Еще интересно: в пошаговом режиме трассировки программы ошибок не возникает.

В чем же ошибка?
Кто-нибудь уже сталкивался с подобнойситуацией?!...

Заранее спасибо.
Re: Проблема с DrawDibDraw
От: adontz Грузия http://adontz.wordpress.com/
Дата: 22.06.03 12:15
Оценка:
Здравствуйте, UJey, Вы писали:

UJ> Битмапку гружу вручную (чтение заголовка, цветовых данных...)

Зачем? Не легчели взять DC у Surface и грузить в него?
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[2]: Проблема с DrawDibDraw
От: UJey Украина  
Дата: 22.06.03 15:32
Оценка:
Здравствуйте, adontz, Вы писали:

A> Зачем? Не легчели взять DC у Surface и грузить в него?


Есть предложения как загрузить BMP-файл прямо на Surface?
Буду очень благодарен за любіе предложения.

Лично мне не совсем понятно как можно грузить из файла на Surface и при этом каким-то образом использовать DC поверхности.

Проясните меня!

Спасибо.
Re[3]: Проблема с DrawDibDraw
От: adontz Грузия http://adontz.wordpress.com/
Дата: 22.06.03 15:48
Оценка:
Здравствуйте, UJey, Вы писали:

UJ>Проясните меня!



Навскидку так

Объявления переменных опущены

lpSurface->GetDC(&hDC)
hDCCompatible = CreateCompatbleDC(hDC)
hBitmap = LoadImage(hInstance,"test.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
SelectObject(hDCCompatible,hBitmap);
BOOL BitBlt(hDC,0,0,width,height,hDCCompatible,0,0,SRC_COPY);

Ну и подчистить за собой


width и height получть с помощью

BOOL GetBitmapDimensionEx(
  HBITMAP hBitmap,     // handle to bitmap
  LPSIZE lpDimension   // dimensions
);
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[4]: Проблема с DrawDibDraw
От: UJey Украина  
Дата: 22.06.03 20:00
Оценка:
Здравствуйте, adontz, Вы писали:


A>Навскидку так


A>
A>Объявления переменных опущены

A>lpSurface->GetDC(&hDC)
A>hDCCompatible = CreateCompatbleDC(hDC)
A>hBitmap = LoadImage(hInstance,"test.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
A>SelectObject(hDCCompatible,hBitmap);
A>BOOL BitBlt(hDC,0,0,width,height,hDCCompatible,0,0,SRC_COPY);

A>Ну и подчистить за собой

A>


A>width и height получть с помощью


A>
A>BOOL GetBitmapDimensionEx(
A>  HBITMAP hBitmap,     // handle to bitmap
A>  LPSIZE lpDimension   // dimensions
A>);
A>



СУПЕР! Как я сам не догадался!

А можно еще что-то аналогичное придумать для AVI файла, потому как у меня задача — выводить на экран картинки и видео.
Может есть что-то похожее? Потому что, почти все функции для AVI выдают кадр в виде DIB изображений...

Заранее спасибо!

Евгений.
Re[5]: Проблема с DrawDibDraw
От: adontz Грузия http://adontz.wordpress.com/
Дата: 22.06.03 21:13
Оценка:
Здравствуйте, UJey, Вы писали:

Ходят слухи, что DirectShow умеет рисовать в Surface
Но если лень разбирать с directshow (а заодно терять в произодительности) то вроде можно HBITMAP из DIBSection делать

HBITMAP CreateDIBitmap(
HDC hdc, // handle to DC
CONST BITMAPINFOHEADER *lpbmih, // bitmap data
DWORD fdwInit, // initialization option
CONST VOID *lpbInit, // initialization data
CONST BITMAPINFO *lpbmi, // color-format data
UINT fuUsage // color-data usage
);
A journey of a thousand miles must begin with a single step © Lau Tsu
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.