掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
Imageに読み込んだ画像の透明度を変化させるには? (ID:44885)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
ちょっと長いですが、ボタンを押すとだんだんと透明度が上がるサンプルです。 なお、上にあるImage2を移動させることは考えていませんので、 その場合はちょっと工夫がいると思います。 private { Private 宣言 } BmpBase, BmpTrans: TBitmap; function AdjustByte(value: extended): Byte; begin if value < 0 then result := 0 else if value > 255 then result := 255 else result := Round(value); end; procedure TForm1.FormCreate(Sender: TObject); begin BmpBase := TBitmap.Create; BmpBase.Width := Image2.Width; BmpBase.Height := Image2.Height; BmpBase.PixelFormat := pf24bit; BitBlt(BmpBase.Canvas.Handle, 0, 0, Image2.Width, Image2.Height, Image1.Picture.Bitmap.Canvas.Handle, Image2.Left - Image1.Left, Image2.Top - Image1.Top, SRCCOPY); BmpTrans := TBitmap.Create; BmpTrans.Width := Image2.Width; BmpTrans.Height := Image2.Height; BmpTrans.PixelFormat := pf24bit; BitBlt(BmpTrans.Canvas.Handle, 0, 0, Image2.Width, Image2.Height, Image2.Picture.Bitmap.Canvas.Handle, 0, 0, SRCCOPY); end; procedure TForm1.Button1Click(Sender: TObject); var x, y: Integer; Pb: PByteArray; Pt: PByteArray; Pp: PByteArray; ibR, ibG, ibB: Byte; const wariai: Single = 0; begin wariai := wariai + 0.01; if wariai > 1 then wariai := 0; Button1.Caption := Format('%.2f', [wariai]); for y := 0 to Pred(Image2.Height) do begin Pb := BmpBase.ScanLine[y]; Pt := BmpTrans.ScanLine[y]; Pp := Image2.Picture.Bitmap.ScanLine[y]; for x := 0 to Pred(Image2.Width) do begin ibB := AdjustByte(Pb[X*3+0] * wariai + Pt[X*3+0] * (1 - wariai)); ibG := AdjustByte(Pb[X*3+1] * wariai + Pt[X*3+1] * (1 - wariai)); ibR := AdjustByte(Pb[X*3+2] * wariai + Pt[X*3+2] * (1 - wariai)); Pp[X*3+0] := ibB; Pp[X*3+1] := ibG; Pp[X*3+2] := ibR; end; end; Image2.Refresh; end; procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin BmpBase.Free; BmpTrans.Free; end;
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.