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图!!!
但不知道各个语句的意思????请高手解析一下。

解决方案 »

  1.   

    1 图像格式到8位(bmp)
    2 palette 是图片的颜色选项
    3  图片1,2走y路线,然后现实图片3
    4 显示图片1的走位;
    5 那时肯定的;
      

  2.   

    请解析一下for y := 0 to bitmap1.Height -1 do循环里面的语句!
      

  3.   

    回复人: flyhot(阳光清晨) ( ) 信誉:100  2003-3-27 10:22:30  得分:0 
     
     
      
    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
      

  4.   

    3:
       这段代码是在做图象处理运算。一行一行的进行,替换各行中(各点)的颜色值,以达到一种特殊的效果。 
    chen
      

  5.   

    对你的代码感到很疑惑哦,他想实现什么功能,再画一遍?
                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个循环嗨哟什么意义?
      

  6.   

    我觉得实现的功能是:先显示一图片,再在其上显示第二幅,将第一幅给替换掉。
    for y := 0 to bitmap1.Height -1 do循环里面的语句!同意 cjy(cjy)
      

  7.   

    http://expert.csdn.net/Expert/TopicView1.asp?id=1472467自己看~~~另外:位图的Palette属性用来控制位图的颜色映射Image1.Canvas.Draw(0,0,bitmap3); 将Bitmap3中的位图绘制到画布上,稍微看下相关VCL,实际上也就是对Image1.Picture.Bitmap.Canvas进行操作,既可在Image1中显示绘制的位图至于Application.ProcessMessages,让进程响应消息