画像に透明なテキストを書く



Writing Transparent Text Image



解決:

1つのオプションは、Windows.pasユニットでAlphaBlend関数を使用することです。このようなものは、画像にオーバーレイされた半透明のテキスト(ドロップシャドウ付き-ジムマッキースの応答に基づいて構築)を生成します。

Windows、グラフィックスを使用します。 。 。 。 var BackgroundImage:Graphics.TBitmap; {WindowsユニットにもTBitmap宣言があるため、Graphics.TBitmap専用に呼び出す必要があります} TextImage:Graphics.TBitmap; BlendFunc:BLENDFUNCTION; BlendFunc.BlendOpを開始します:= AC_SRC_OVER; BlendFunc.BlendFlags:= 0; BlendFunc.SourceConstantAlpha:= $ C0; {$ 00- $ FF(0-255)の16進値。不透明度のパーセントを表します。$ 00は完全に透明で、$ FFは完全に不透明です。 $ C0は75%不透明です} BlendFunc.AlphaFormat:= AC_SRC_ALPHA; {BackgroundImageは、テキストをオーバーレイする画像を保持するためのものです} BackgroundImage:= Graphics.TBitmap.Create; BackgroundImage.LoadFromFile( 'yourimagehere.bmp');を試してください。 {オーバーレイするテキストを保持する別のTBitmapを作成します} TextImage:= Graphics.TBitmap.Create; {このビットマップを、テキストを表示する背景画像と同じサイズに設定してください。 } TextImage.Height:= BackgroundImage.Height; TextImage.Width:= BackgroundImage.Width; {AlphaBlendでの私の限られた経験では、黒は常に100%透明です。したがって、TextImageを完全に黒でペイントします。これをいじって、最終的な結果に与える影響を確認してください。 } TextImage.Canvas.Brush.Color:= clBlack; TextImage.Canvas.FloodFill(0、0、clNone、fsBorder); TextImage.Canvas.Font.Style:= [fsBold]; {最初に影を書く} TextImage.Canvas.Brush.Style:= bsClear; TextImage.Canvas.Font.Color:= clDkGray; TextImage.Canvas.TextOut(11、11、 'テスト'); {次に、テキストを上に配置します(わずかにオフセット)} TextImage.Canvas.Brush.Style:= bsClear; TextImage.Canvas.Font.Color:= clMaroon; TextImage.Canvas.TextOut(10、10、 'テスト'); {AlphaBlend関数を使用して、テキストを保持しているビットマップを、元の画像を保持しているビットマップの上にオーバーレイします。 } Windows.AlphaBlend(BackgroundImage.Canvas.Handle、0、0、TextImage.Width、TextImage.Height、TextImage.Canvas.Handle、0、0、TextImage.Width、TextImage.Height、BlendFunc); {更新されたBackgroundImageを表示用のTImageコントロールに割り当てます} Image1.Picture.Bitmap.Assign(BackgroundImage);最後にTextImage.Free;終わり;最後にBackgroundImage.Free;終わり;終わり; 

影は簡単です:



//画像の上にあると太字がよく表示されますimage1.Canvas.Font.Style:= [fsBold]; //シャドウを最初に書き込みますimage1.Canvas.Brush.Style:= bsClear; image1.Canvas.Font.Color:= clGrayText; image1.Canvas.TextOut(1、1、 'こんにちは'); //次に、テキストを上に配置します(わずかにオフセット)image1.Canvas.Brush.Style:= bsClear; image1.Canvas.Font.Color:= clBlack; image1.Canvas.TextOut(0、0、 'こんにちは');

これは、背景が透明なテキストです。それとも、テキスト自体を同じように透明にしたいですか?それは少しトリッキーです。手動で描画する必要があります。代わりにそれを行う簡単な方法は、画像に書き込んでいる領域の色の平均をサンプリングすることです。次に、フォントの色を少し明るくし、影を少し暗くします。それからそれは一種のブレンドです。


あなたが達成しようとしていることは、単に背景が透明なテキストを書くよりも少し複雑だと思います。つまり、画像に何らかの形のアルファブレンドテキストを書き込もうとしています。
最も簡単な方法は、GDI +ルーチンを利用することです。それらはdelphi用にカプセル化されており、http://www.progdigy.com/からダウンロードできます。例として使用できるはずの例がたくさんあります。