Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.04.03;
Скачать: CL | DM;

Вниз

HBitMap & HDC, создание Bitmap c буфером данных изображения   Найти похожие ветки 

 
Nick_N_A ©   (2003-02-04 07:05) [0]

Как создать API-Bitmap, что-бы в итоге был массив, в котором
меняя его элементы - менялись-бы цвета растра, его точки

я даже немного поэксперементировал:
Var
FHandle:HBitMap;// дескриптор битмапа
Data:pointer;// адрес массива данных

procedure CreateDC(DC: HDC; x, y, bitsPerPixel: integer=24);
Var s:tagSize;
Begin
size:=x*y*BitsPerPixel;
FHandle:=CreateCompatibleBitmap(DC,x,y);
GetBitmapDimensionEx(FHandle,s);
SetBitmapDimensionEx(FHandle,x,y,@s);
Data:=GetMemory(size);
//GetBitmapBits(FHandle,size,Data);// [1]
SetBitmapBits(FHandle,size,Data);// [2]
end;
---------------
для получение контекста устройства DC=GetDC(Form1.Handle);
самое интересное, что при отсутствии [2] при попытке нарисовать
FBitMap изображение остается на месте - не работает, как
будто идеально прозрачное,
при наличии строчки [2] чзображение - черный "квадрат"
при этом все попытки поменять данные в Data^, приводят к неудаче,
а при наличии строки [1] делается Capture содержимого окна.

-Как-же все-таки создать битмап, на API, чтобы изображение
было представлено массивом 24-битных цветов (хотелось-бы 32-бита
но с 8-ю=reserved,8-R,8-G,8-B)
-Можно-ли получить адрес аппаратного буфера растра, изображения
окна, т.е. поменяли один цвет - он сразу-же поменялся на экране,
без какого-либо ручного/автоматического вывода на экран

P.S.
Увидеть изо на VCL можно
BM:TBitmap;
BM:=TBitMap.Create;
BM.Handle:=FHandle;
My.Canvas.Draw(Bm,0,0);

Без VCL (импорт из кол)
procedure TBitMap.DrawToDC;
var
DCfrom, DC0: HDC;
oldBmp: HBitmap;
oldHeight: Integer;
B: tagBitmap;
s:tagSize;
begin
GetBitmapDimensionEx(FHandle,s)
Height:=s.cx;
oldHeight := Height;
if GetObject( fHandle, sizeof( B ), @B ) <> 0 then
oldHeight := B.bmHeight;
DC0 := GetDC( 0 );
DCfrom := CreateCompatibleDC( DC0 );
ReleaseDC( 0, DC0 );
oldBmp := SelectObject( DCfrom, fHandle );
BitBlt(FDC, 0{x}, 0{y}, Width, oldHeight, DCfrom, 0, 0, SRCCOPY );
SelectObject( DCfrom, oldBmp );
DeleteDC( DCfrom );
end;

для проверки работоспособности рисования
FHandle:=LoadBitMap(0,pointer(OBM_CLOSE));


 
i-C3H7OH ©   (2003-02-04 12:20) [1]

в DirectDraw - можно, я думаю. в GDI вывод идет только в окна на контекст устройства, там нельзя получить ссылку на видеопамять экрана...


 
Nick_N_A ©   (2003-02-05 05:32) [2]

Удалено модератором
Примечание: Приз за орфографию


 
Nick_N_A ©   (2003-02-06 05:35) [3]

Неужели никто никогда не работал с битмапами на АПИ


 
Nick_N_A ©   (2003-02-06 06:10) [4]

В руководстве коротко сказано что SetBitmapBits задает
какието биты отвечающие за рисунок, я так понял, что это и есть байты, отвечающие за сам рисунок, в 24-бит массив 3-х байтных структур RGB. Неужели я ошибаюсь ?


 
MBo ©   (2003-02-06 06:33) [5]

нет, не ошибаешься.



Страницы: 1 вся ветка

Текущий архив: 2003.04.03;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.022 c
1-6486
Dr.L.
2003-03-24 14:55
2003.04.03
Форматирование текста в Excel из Delphi ???


1-6512
DeMoN-777
2003-03-24 18:10
2003.04.03
Вытаскивание нужной информации из текстовика


14-6731
Anatoly Podgoretsky
2003-03-15 01:32
2003.04.03
Именинники 15 марта


7-6826
Prosta-GIO
2003-02-11 15:49
2003.04.03
Как приложению воспользоваться своими шрифтами? Без помощи пользо


9-6287
JB
2002-10-28 09:58
2003.04.03
Спрайты для игры