Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.09;
Скачать: CL | DM;

Вниз

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 вся ветка

Текущий архив: 2003.10.09;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.025 c
7-27751
Саня
2003-07-24 07:04
2003.10.09
Дефрагментация


3-27402
duke2
2003-09-18 07:31
2003.10.09
Соединение с InterBase с раб.места происходит 100 сек при пустой


3-27342
Vitaly
2003-09-19 19:57
2003.10.09
GIF


1-27442
Артем
2003-09-28 08:54
2003.10.09
Вопрос по компоненту WebBrowser


1-27509
Bocman
2003-09-26 15:05
2003.10.09
выделен ли текст в Edit