var Bitmap1, Bitmap2, Bitmap3: TBitmap;
Image1Loaded, Image2Loaded: Boolean;
procedure TForm1.FormCreate(Sender: TObject);
begin
bitmap1 := Graphics.TBitmap.Create;
bitmap2 := Graphics.TBitmap.Create;
bitmap3 := Graphics.TBitmap.Create;
bitmap1.PixelFormat := pf8bit; //?(1) pf8bit是什么意思?
bitmap2.PixelFormat := pf8bit;
bitmap3.PixelFormat := pf8bit; try
bitmap1.LoadFromFile('factory.bmp');
bitmap2.LoadFromFile('handshak.bmp');
Image1Loaded := true;
Image2Loaded := true;
bitmap3.Palette := bitmap1.Palette; //? (2) Palette是什么来的?
bitmap3.Height := bitmap1.Height;
bitmap3.Width := bitmap1.Width;
except
Image1Loaded := false;
Image2Loaded := false;
end;
Form1.DoubleBuffered:=True;
end;procedure TForm1.SlideFromLeft1Click(Sender: TObject);
var
Current: PByteArray;
Next: PByteArray;
ToDisplay: PByteArray;
i, y, j, z: Integer;begin
if not (Image1Loaded) then
ShowMessage('Bitmap1 not loaded');
if not (Image2Loaded) then
ShowMessage('Bitmap2 not loaded');
if((Image1Loaded) and (Image2Loaded)) then
begin
for i := 0 to bitmap1.Width - 1 do
begin
for y := 0 to bitmap1.Height -1 do
begin //?(3) 下面这段干什么用?
Current := bitmap1.ScanLine[y];
Next := bitmap2.ScanLine[y];
ToDisplay := bitmap3.ScanLine[y];
for z := 0 to i - 1 do
ToDisplay[z] := Next[z];
for j := i to bitmap1.Width - 1 do
ToDisplay[j] := Current[j];
end;
Image1.Canvas.Draw(0,0,bitmap3); //??(4) 什么意思,直接用没效果。
Application.ProcessMessages(); //??(5) 不用则没有效果。
end;
end;
end;程序测试是从左到右画BMP图!!!
但不知道各个语句的意思????请高手解析一下。
Image1Loaded, Image2Loaded: Boolean;
procedure TForm1.FormCreate(Sender: TObject);
begin
bitmap1 := Graphics.TBitmap.Create;
bitmap2 := Graphics.TBitmap.Create;
bitmap3 := Graphics.TBitmap.Create;
bitmap1.PixelFormat := pf8bit; //?(1) pf8bit是什么意思?
bitmap2.PixelFormat := pf8bit;
bitmap3.PixelFormat := pf8bit; try
bitmap1.LoadFromFile('factory.bmp');
bitmap2.LoadFromFile('handshak.bmp');
Image1Loaded := true;
Image2Loaded := true;
bitmap3.Palette := bitmap1.Palette; //? (2) Palette是什么来的?
bitmap3.Height := bitmap1.Height;
bitmap3.Width := bitmap1.Width;
except
Image1Loaded := false;
Image2Loaded := false;
end;
Form1.DoubleBuffered:=True;
end;procedure TForm1.SlideFromLeft1Click(Sender: TObject);
var
Current: PByteArray;
Next: PByteArray;
ToDisplay: PByteArray;
i, y, j, z: Integer;begin
if not (Image1Loaded) then
ShowMessage('Bitmap1 not loaded');
if not (Image2Loaded) then
ShowMessage('Bitmap2 not loaded');
if((Image1Loaded) and (Image2Loaded)) then
begin
for i := 0 to bitmap1.Width - 1 do
begin
for y := 0 to bitmap1.Height -1 do
begin //?(3) 下面这段干什么用?
Current := bitmap1.ScanLine[y];
Next := bitmap2.ScanLine[y];
ToDisplay := bitmap3.ScanLine[y];
for z := 0 to i - 1 do
ToDisplay[z] := Next[z];
for j := i to bitmap1.Width - 1 do
ToDisplay[j] := Current[j];
end;
Image1.Canvas.Draw(0,0,bitmap3); //??(4) 什么意思,直接用没效果。
Application.ProcessMessages(); //??(5) 不用则没有效果。
end;
end;
end;程序测试是从左到右画BMP图!!!
但不知道各个语句的意思????请高手解析一下。
2 palette 是图片的颜色选项
3 图片1,2走y路线,然后现实图片3
4 显示图片1的走位;
5 那时肯定的;
1 图像(bmp)格式为8位(还有2,4,24位的,24位是真彩的,2位是黑白二色的)
2 palette 是windows中BMP的颜色调色板,实际上是一个数据结构,用来查BMP中每一点的RGB值
3 Image1.Canvas.Draw(0,0,bitmap3);这句话的作用是在Image1的画布上画bitmap3;
建议你先看一下Windows中BMP的格式,GDI方面的知识
cjy
这段代码是在做图象处理运算。一行一行的进行,替换各行中(各点)的颜色值,以达到一种特殊的效果。
chen
Current := bitmap1.ScanLine[y];
Next := bitmap2.ScanLine[y]; //bitmap1和bitmap2不是一样的吗?
ToDisplay := bitmap3.ScanLine[y];
for z := 0 to i - 1 do
ToDisplay[z] := Next[z];
for j := i to bitmap1.Width - 1 do
ToDisplay[j] := Current[j]; //既然一样的,这样2个循环嗨哟什么意义?
for y := 0 to bitmap1.Height -1 do循环里面的语句!同意 cjy(cjy)