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

Вниз

BitBlt   Найти похожие ветки 

 
Spawn   (2003-08-03 16:20) [0]

Есть ли функция, работающая быстрее данной? А то при использовании данной функции для копирования части изображения и сохранении его в AVI файле лаги возникают жуткие(всмысле не одного фрейма, а циклом, до тех пор пока не отменить запись).


 
miek   (2003-08-03 18:08) [1]

В особенности хотелось бы знать, есть ли что-нибудь более быстрое для вывода битмапа на экран. Но скорее всего такого нет.


 
Spawn   (2003-08-03 18:10) [2]

miek © (03.08.03 18:08)
Тут статья есть для работы с пикселами - скорость впечатляет. Если не видел, то пиощи поиском Quick Pixels.


 
C3H7OH   (2003-08-04 03:31) [3]

в ГДИ быстрее нет. если мало используй DirectDraw


 
MBo   (2003-08-04 06:43) [4]

bitblt, конечно, работает достаточно быстро, проблема, скорее всего, в чем-то другом


 
Spawn   (2003-08-04 07:12) [5]

MBo © (04.08.03 06:43) Вряд ли. Я пробывал убирать в цикле вставку фреймов в АВИ файл. Лаги практически не изменялись.

procedure GetFrame(var BitMap:TBitMap;WND:HWND;Rop:Cardinal);
var
Rect:TRect;
begin
GetWindowRect(Wnd,Rect);
BitMap.Width:=Rect.Right-Rect.Left;
BitMap.Height:=Rect.Bottom-Rect.Top;
BitBlt(BitMap.Canvas.Handle, 1, 1, Rect.Right-Rect.Left,
( BitMap:TBitMap)
MBo © (04.08.03 06:43) Вряд ли. Я пробывал убирать в цикле вставку фреймов в АВИ файл. Лаги практически не изменялись.

procedure GetFrame(var BitMap:TBitMap;WND:HWND;Rop:Cardinal);
var
Rect:TRect;
begin
GetWindowRect(Wnd,Rect);
BitMap.Width:=Rect.Right-Rect.Left;
BitMap.Height:=Rect.Bottom-Rect.Top;
BitBlt(BitMap.Canvas.Handle, 1, 1, Rect.Right-Rect.Left,
Rect.Bottom-Rect.Top, DC, 0, 0, SRCCOPY);
end;

function GetBitMapBytes(BitMap:TBitMap):Pointer;
var
LineSize, adr : cardinal;
p : pointer;
y:integer;
begin
Result:=nil;
BitMap.PixelFormat := pf24bit;
LineSize := BitMap.Width * 3;
GetMem (p, LineSize * BitMap.Height);
adr := cardinal(p);
for y := 0 to BitMap.Height-1 do
begin
Result := BitMap.ScanLine[y];
Move(Result^, pointer(adr)^, LineSize);
Inc(adr, LineSize);
end;
end;

function InsertFrame(CurrentFrame:integer;Frame:PByte;bmInfo:PBITMAPINFOHEADER):Boolean;
var
Size:LongInt;
begin
try
Result:=True;
Size:=bmInfo.biWidth*bmInfo.biHeight*3;
AVIStreamWrite(Save,CurrentFrame+AVIStreamStart(save),1,Frame,Size,AVIIF_KEYFRAME,nil,nil);
except
Result:=False;
end;
end;


while IsRecording do
begin
GetFrame(BitMap, Wnd, SRCCOPY);
Inc(CurrentFrame);
Frame:=GetBitMapBytes(BitMap);
InsertFrame(CurrentFrame,Frame,bmInfoHeader);
Application.ProcessMessages;
end;


Если же я закоментирую InsertFrame и GetBitMapBytes то тормоза останутся такими же. А в DirectX какие подобные функции существуют?



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

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

Наверх




Память: 0.46 MB
Время: 0.008 c
4-27768
waw
2003-08-04 14:48
2003.10.09
Как добваить Windows меню


1-27503
Seldon
2003-09-26 15:30
2003.10.09
JPEG


3-27341
Нитолай
2003-09-19 18:08
2003.10.09
Date


14-27653
Empleado
2003-09-19 19:11
2003.10.09
А.Розенбаум (mp3)


1-27575
LXj
2003-09-29 09:59
2003.10.09
Исчезновение окна с меню и палитрой компонент





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