Главная страница
    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.009 c
3-27375
rosl
2003-09-19 03:32
2003.10.09
прием записей


4-27768
waw
2003-08-04 14:48
2003.10.09
Как добваить Windows меню


1-27535
Sensor-x
2003-09-30 00:06
2003.10.09
Как правильно определить время?


3-27335
Saperxl
2003-09-19 14:09
2003.10.09
TField.LookupDataSet


14-27733
wnew
2003-09-19 22:32
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский