首页  编辑  

淡入和淡出

Tags: /超级猛料/Picture.图形图像编程/图片处理/   Date Created:

下面的代码可以在窗体上面淡入淡出一个图形:

type

 PRGBTripleArray = ^ TRGBTripleArray ;

 TRGBTripleArray = array [ 0 .. 32767 ] of TRGBTriple ;

  /////////////////////////////////////////////////

  //                  Fade In                    //

  /////////////////////////////////////////////////

procedure FadeIn ( ImageFileName : TFileName );

var

 Bitmap , BaseBitmap : TBitmap ;

 Row , BaseRow       : PRGBTripleArray ;

 x , y , step         : integer ;

begin

  // Bitmaps vorbereiten / Preparing the Bitmap //

 Bitmap := TBitmap . Create ;

  try

   Bitmap . PixelFormat := pf32bit ; // oder pf24bit / or pf24bit //

   Bitmap . LoadFromFile ( ImageFileName );

   BaseBitmap := TBitmap . Create ;

    try

     BaseBitmap . PixelFormat := pf32bit ;

     BaseBitmap . Assign ( Bitmap );

      // Fading //

      for step := 0 to 32 do

      begin

        for y := 0 to ( Bitmap . Height - 1 ) do

        begin

         BaseRow := BaseBitmap . Scanline [ y ];

          // Farben vom Endbild holen / Getting colors from final image //

         Row := Bitmap . Scanline [ y ];

          // Farben vom aktuellen Bild / Colors from the image as it is now //

          for x := 0 to ( Bitmap . Width - 1 ) do

          begin

           Row [ x ]. rgbtRed := ( step * BaseRow [ x ]. rgbtRed ) shr 5 ;

           Row [ x ]. rgbtGreen := ( step * BaseRow [ x ]. rgbtGreen ) shr 5 ; // Fading //

           Row [ x ]. rgbtBlue := ( step * BaseRow [ x ]. rgbtBlue ) shr 5 ;

          end ;

        end ;

       Form1 . Canvas . Draw ( 0 , 0 , Bitmap ); // neues Bild ausgeben / Output new image //

       InvalidateRect ( Form1 . Handle , nil , False );

        // Fenster neu zeichnen / Redraw window //

       RedrawWindow ( Form1 . Handle , nil , 0 , RDW_UPDATENOW );

      end ;

    finally

     BaseBitmap . Free ;

    end ;

  finally

   Bitmap . Free ;

  end ;

end ;

/////////////////////////////////////////////////

//                  Fade Out                   //

/////////////////////////////////////////////////

procedure FadeOut ( ImageFileName : TFileName );

var

 Bitmap , BaseBitmap : TBitmap ;

 Row , BaseRow : PRGBTripleArray ;

 x , y , step : integer ;

begin

  // Bitmaps vorbereiten / Preparing the Bitmap //

 Bitmap := TBitmap . Create ;

  try

   Bitmap . PixelFormat := pf32bit ;   // oder pf24bit / or pf24bit //

   Bitmap . LoadFromFile ( ImageFileName );

   BaseBitmap := TBitmap . Create ;

    try

     BaseBitmap . PixelFormat := pf32bit ;

     BaseBitmap . Assign ( Bitmap );

      // Fading //

    for step := 32 downto 0 do

      begin

        for y := 0 to ( Bitmap . Height - 1 ) do

        begin

         BaseRow := BaseBitmap . Scanline [ y ];

          // Farben vom Endbild holen / Getting colors from final image //

         Row := Bitmap . Scanline [ y ];

          // Farben vom aktuellen Bild / Colors from the image as it is now //

          for x := 0 to ( Bitmap . Width - 1 ) do

          begin

           Row [ x ]. rgbtRed := ( step * BaseRow [ x ]. rgbtRed ) shr 5 ;

           Row [ x ]. rgbtGreen := ( step * BaseRow [ x ]. rgbtGreen ) shr 5 ; // Fading //

           Row [ x ]. rgbtBlue := ( step * BaseRow [ x ]. rgbtBlue ) shr 5 ;

          end ;

        end ;

       Form1 . Canvas . Draw ( 0 , 0 , Bitmap );   // neues Bild ausgeben / Output new image //

       InvalidateRect ( Form1 . Handle , nil , False );

        // Fenster neu zeichnen / Redraw window //

       RedrawWindow ( Form1 . Handle , nil , 0 , RDW_UPDATENOW );

       sleep ( 20 );

      end ;

    finally

     BaseBitmap . Free ;

    end ;

  finally

   Bitmap . Free ;

  end ;

end ;

procedure TForm1 . Button1Click ( Sender : TObject );

begin

 FadeIn ( 'F:\Documents\xywper0071.BMP' )

end ;

{*****************************}

{by Yucel Karapinar, ykarapinar@hotmail.com }

{ Only for 24 ve 32 bits bitmaps }

procedure FadeOut ( const Bmp : TImage ; Pause : Integer );

var

 BytesPorScan , counter , w , h : Integer ;

 p                 : pByteArray ;

begin

  if not ( Bmp . Picture . Bitmap . PixelFormat in [ pf24Bit , pf32Bit ]) then

    raise Exception . Create ( 'Error, bitmap format is not supporting.' );

  try

   BytesPorScan := Abs ( Integer ( Bmp . Picture . Bitmap . ScanLine [ 1 ]) -

     Integer ( Bmp . Picture . Bitmap . ScanLine [ 0 ]));

  except

    raise Exception . Create ( 'Error!!' );

  end ;

  for counter := 1 to 256 do

  begin

    for h := 0 to Bmp . Picture . Bitmap . Height - 1 do

    begin

     P := Bmp . Picture . Bitmap . ScanLine [ h ];

      for w := 0 to BytesPorScan - 1 do

        if P ^[ w ] > 0 then P ^[ w ] := P ^[ w ] - 1 ;

    end ;

   Sleep ( Pause );

   Bmp . Refresh ;

  end ;

end ;

procedure TForm1 . Button2Click ( Sender : TObject );

begin

 FadeOut ( Image1 , 1 );

end ;