1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| procedure DoTVLineParallelProc(Index: PtrInt; Data: Pointer; Item: TMultiThreadProcItem);
var
x : LongWord;
buffer : PByte;
begin
Buffer := PByte(Data);
Inc(buffer, (Index * FBmp.Width * 4));
if odd(Index) then
begin
For x:= 0 to FBmp.Width-1 do
begin
Buffer^:= 0; // R
inc(Buffer);
Buffer^:= 0; // G
inc(Buffer)
Buffer^:= 0; // B
inc(Buffer)
Buffer^:= 255; // A
inc(Buffer)
end;
end;
end;
Procedure TForm1.DoParallelJob;
begin
FBmp.BeginUpdate(True);
ProcThreadPool.DoParallel(@DoTVLineParallelProc, 0, FBmp.Height - 1, FBmp.RawImage.Data, ProcThreadPool.MaxThreadCount);
FBmp.EndUpdate();
end; |
Partager