Главная страница
    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
14-27660
Омлет
2003-09-22 00:01
2003.10.09
Именинники 22 сентября !


3-27374
deadbitch
2003-09-17 23:19
2003.10.09
Чтение из Excel-книги в Дельфи


14-27745
nika_ufc
2003-09-19 18:06
2003.10.09
надоел этот английский , помогите :(


1-27512
Sirus
2003-09-26 12:16
2003.10.09
Как раскрасить строки в TListView в разные цвета???


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