请问各位高手,生成大幅面单色彩的BMP文件最快的算法是什么?(100分)

  • 主题发起人 主题发起人 arkee
  • 开始时间 开始时间
A

arkee

Unregistered / Unconfirmed
GUEST, unregistred user!
我要用Delphi生成许多3000*3000的单色彩BMP文件,现在在用最简单的算法,不过速度很不理想。谁有更好的方法?谢啦~~~

for y := 0 to h - 1 do
begin
pt := bmpTemp.ScanLine[y];

for x := 0 to w - 1 do
begin
pt[3*x] := 128;
pt[3*x+1] := 20;
pt[3*x+2] := 100;
end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
i : integer;
begin
Image1.Canvas.Brush.Color := clSkyBlue;
Image1.Canvas.FillRect(Image1.Canvas.ClipRect);

for i := 1 to 10 do
begin
Image1.Picture.SaveToFile('C:/' + FormatDateTime('yyyymmdd_hhnnsszzz', Now) + '.bmp');
end;
end;
 
至强:
var
bmp : tbitmap ;
begin
bmp := tbitmap.ctreae;
bmp.PixelFormat := pf24bit;
bmp.Width := 3000;
bmp.Height:= 3000;
bmp.Canvas.Brush.Color := $801064;
bmp.Canvas.FillRect(Rect(0,0,3000,3000));
.....
bmp.free;
end;
或:
type
TRGB = array [0..2] of byte;
TColArr = array [0..2999] of TRGB;

var
bmp : tbitmap ;
i : integer;
pt : ^ac;
begin
bmp := tbitmap.Create ;
bmp.PixelFormat := pf24bit;
bmp.Width := 3000;
bmp.Height:= 3000;

pt := bmp.ScanLine[0];
pt[0][0] := 128;
pt[0][1] := 32;
pt[0][2] := 100;

for i := 1 to 2999 do Move(pt[0],pt,sizeof(TRGB));
for i := 1 to 2999 do Move(bmp.ScanLine[0]^,bmp.ScanLine^,sizeof(ac));
可以减少循环次数.
 
搞定,谢
 
多人接受答案了。
 

Similar threads

I
回复
0
查看
688
import
I
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
646
import
I
后退
顶部