LoginSignup
10
3

[Delphi?][ネタ]透明に見えるパターンを描く

Last updated at Posted at 2023-06-06

透明に見えるパターン

一部の人達には透明に見えるこれ

image.png

画像ビュワーでこれ出したいなあと思ってコードを書いてみました。
png 画像の透明部分にわざわざこのパターンを描いて透明なのか透明じゃ無いのかっていう状態にできます!

透明部分に透明を描く!
// uses に System.UITypes, FMX.Types, FMX.Graphics を追加

procedure DrawTransPattern(const ABmp: TBitmap);
type
  TAlphaColorArray = array [0.. 0] of TAlphaColor;
  PAlphaColorArray = ^TAlphaColorArray;
const
  TRANS_COLORS: array [0.. 1] of TAlphaColor = ($ff_ff_ff_ff, $ff_cc_cc_cc);
begin
  if ABmp.PixelFormat <> TPixelFormat.BGRA then
    Exit;

  var Data: TBitmapData;
  ABmp.Map(TMapAccess.Write, Data);
  try
    for var Y := 0 to Data.Height - 1 do
    begin
      var Line := PAlphaColorArray(Data.GetScanline(Y));

      {$R-} // 範囲チェックするとエラーになるので範囲チェックさせない
      for var X := 0 to Data.Width - 1 do
        if Line[X] and $ff_00_00_00 = 0 then
          Line[X] := TRANS_COLORS[((X xor Y) and %0000_1000) shr 3];
    end;
  finally
    ABmp.Unmap(Data);
  end;
end;

使い方

こんな風に Bitmap を渡すだけ!

使い方
procedure TForm1.Button1Click(Sender: TObject);
begin
  DrawTransPattern(Image1.Bitmap);
end;

すると、↓これが

こう!

おわりに

みんなでいろんな物を透明にしよう!

ちなみにこのキャラクターはシリアルゲームズの公式キャラ「シリアちゃん」です!
シリアちゃん公式サイト:https://seria.serialgames.co.jp/

この市松模様を書くコード、コードゴルフの題材になりませんかね…?

10
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
3