透明に見えるパターン
一部の人達には透明に見えるこれ
画像ビュワーでこれ出したいなあと思ってコードを書いてみました。
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/
この市松模様を書くコード、コードゴルフの題材になりませんかね…?