Главная страница
    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.45 MB
Время: 0.009 c
3-6321
StarCon
2003-03-17 13:44
2003.04.03
ADO и DBF


1-6515
Ик сик
2003-03-24 14:23
2003.04.03
Можно ли изменить имя class name окна приложения?


1-6533
dm37
2003-03-21 09:52
2003.04.03
Вызов процедуры, имя которой содержится в переменной


14-6774
Вячеслав
2003-03-17 17:02
2003.04.03
Репозиторий?


1-6436
me2
2003-03-21 11:31
2003.04.03
Полное удаление каталога





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский