Текущий архив: 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.45 MB
Время: 0.009 c