Главная страница
    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
1-27500
Zhouck
2003-09-26 16:19
2003.10.09
Создание фреймов по типу фрейма


3-27305
BanderLog
2003-09-18 06:11
2003.10.09
FastReport


1-27508
Геннадий
2003-09-26 14:32
2003.10.09
Программная прорисовка строк TListView - как?


1-27452
oens
2003-09-27 21:23
2003.10.09
Преобразование текстового файла в html


14-27707
konstantinov
2003-09-20 22:41
2003.10.09
ХР и файлы TIF





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