Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2003.04.03;
Скачать: [xml.tar.bz2];

Вниз

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 вся ветка

Форум: "WinAPI";
Текущий архив: 2003.04.03;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.008 c
1-6610
Makhanev A.S.
2003-03-23 00:32
2003.04.03
Delphi&HTML help...


8-6622
Студент
2003-01-01 22:55
2003.04.03
Как загрузить картинку в Stringgrid


1-6580
Roki
2003-03-20 17:15
2003.04.03
Как обратится к компоненте не по имени, а по типу?


1-6455
intell
2003-03-24 09:18
2003.04.03
Как обновить список файлов в FileListBox?


7-6799
_MAD_
2003-02-07 21:32
2003.04.03
TVtuner





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский