Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Динамическое создание картинки в памяти [D6, WinXP]


chi ©   (2003-11-25 13:47:00) 

и сохранение его в файл.. или не пойму как все это работает :((
Уважаемые мастера, если можно пример. Спасибо.


MADE_IN_USSR   (2003-12-01 12:14:00) [1]

Удалено модератором


chi   (2003-11-30 15:28:00) [2]


> марсианин (30.11.03 03:22) [8]

запутался в этих исходниках , блин. Не понимаю проблему в корне, т.е. hdc, hBitmap, getdibits и т.д.


марсианин   (2003-11-30 03:22:00) [3]

как вариант изучай исходники


hooker   (2003-11-29 20:24:00) [4]

если можно, то скинте ссылочку, где можно было бы почитать о подобных проблемах(желательно русскую)


chi   (2003-11-28 20:25:00) [5]

большое спасибо!


Mihey   (2003-11-27 16:45:00) [6]

2 Chi:

> под картинкой имею в виду битмап, вобщем, надо скопировать часть экрана в память и сохранить его в файл(желательно все без VCL). И я совсем запутался с HDC, HBitmap, указателями и прочими..

Заводим переменную TBitmap:

var Bmp: TBitmap;

Создадим объект, зададим размеры:

Bmp := TBitmap.Create;
Bmp.Width := 300;
Bmp.Height := 200;

Всё, картинка у тебя создана. Сейчас нарисуем в неё экран. Это делается при помощи BitBlt, как ты и знаешь:

var ScreenDC: HDC;

...

ScreenDC := GetDC(0);
try
BitBlt(Bmp.Canvas.Handle, 0, 0, Bmp.Width,
Bmp.Height, ScreenDC, 0, 0, SRCCOPY );
finally
ReleaseDC(0, ScreenDC);
end;

...

Всё, теперь сохраним файл на диск:
Bmp.SaveToFile("screenshot.bmp");

И удалим объект:
Bmp.Free;

Это решение требует только модуля Graphics, т.е. не использует VCL.


chi   (2003-11-27 02:07:00) [7]

неужели ни кто не знает или игнор ??


chi   (2003-11-25 14:34:00) [8]


> MBo © (25.11.03 14:04) [1]
> Расшифруй вопрос - что имеешь в виду под картинкой


под картинкой имею в виду битмап, вобщем, надо скопировать часть экрана в память и сохранить его в файл(желательно все без VCL). И я совсем запутался с HDC, HBitmap, указателями и прочими..
Вот мой код с TIMAGE:

hdcScreen := GetDC(0);
hdcCompatible := CreateCompatibleDC(hdcScreen);
//
//Create a compatible bitmap for hdcScreen.
//
hbmScreen:= CreateCompatibleBitmap(hdcScreen,
GetDeviceCaps(hdcScreen, HORZRES),

GetDeviceCaps(hdcScreen, VERTRES));

// Select the bitmaps into the compatible DC. */

if SelectObject(hdcCompatible, hbmScreen)<>0 then
showmessage("Compatible Bitmap Selection");

//
// Copy color data for the entire display into a
//bitmap that is selected into a compatible DC.
if not BitBlt(hdcCompatible,
0,0,
200, 300,
hdcScreen,
0,0,
SRCCOPY) then

showmessage("Screen to Compat Blt Failed");
ShowWindow(handle, SW_SHOW);
image1.Canvas.Handle:=hdcCompatible;

и вот где там именно указатель на битмап и что здесь HDC как его передавать в GetDibits, каким образом заполняется структура BitmapInfo , зачем вводится PBitmapInfo понять не могу совсем, или я напрочь запутался


Maxud   (2003-11-25 14:07:00) [9]

Что-то типа этого, наверное:
uses Graphics;
...
var b:tbitmap;
begin
b := TBitmap.Create;
try
b.Width := 35;
b.Height:=35;
b.Canvas.Bruch.Color := clRed;
b.Canvas.FillRect(Rect(5,5,30,30));
b.SaveToFile("sdfsdf.bmp");
finally
b.Free;
end;
end;


MBo   (2003-11-25 14:04:00) [10]

Расшифруй вопрос - что имеешь в виду под картинкой


Наверх

Титульная страница Поиск, карта сайта Написать письмо