C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

反転文字列を描画する方法

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■97751 / inTopicNo.1)  反転文字列を描画する方法
  
□投稿者/ ゲッコー (1回)-(2021/07/07(Wed) 23:06:08)

分類:[.NET 全般] 

C#あるいはVB.NETを使って、
背景色を反転した文字列をPictureBox上に描画したいと考えています。

ラインに関しては
https://qiita.com/kimisyo/items/49bbeeb3454721335622

このページの方法でうまくいきました。

文字列に関しては、
http://kaitei.net/winapi/drawing-shapes/

この辺りのページを参考に、

SetTextColor(hDC, CInt(ColorTranslator.ToWin32(ColorVal)))
TextOut(hDC, 100, 100, "abc", 3)

みたいなのを試してみたのですが、
うまくいきませんでした。

どのようにすればよろしいでしょうか?






引用返信 編集キー/
■97760 / inTopicNo.2)  Re[1]: 反転文字列を描画する方法
□投稿者/ ゲッコー (2回)-(2021/07/10(Sat) 07:39:36)
どなたかご回答いただけないでしょうか?

やはり、反転カラーの文字列描画の機能はAPIでも実装されていないのでしょうか?

引用返信 編集キー/
■97761 / inTopicNo.3)  Re[2]: 反転文字列を描画する方法
□投稿者/ とっちゃん (729回)-(2021/07/10(Sat) 17:42:55)
No97760 (ゲッコー さん) に返信

> やはり、反転カラーの文字列描画の機能はAPIでも実装されていないのでしょうか?
>
反転カラーというのは、XOR 描画ということでしょうか?

GDI で、XOR描画できるのは、SetROP2が適用出来るドロー系コマンド(LineToやRectangleなど)と
BitBlt や StretchBlt などの Bitmap 描画コマンド(一部)だけです。

残念ながらテキスト描画にはXOR描画機能はありません。

GDIでテキストをXOR描画する場合は、一度ビットマップに白黒で描画し
それをBitBlt の rop(最後の値)を工夫して描画することで実現します。

具体的なropのパターンについては、以下のURLに詳細がありますのでそちらを参考にしてください。
https://docs.microsoft.com/en-us/windows/win32/gdi/ternary-raster-operations?WT.mc_id=DT-MVP-32182

よく使われる定義(SRCCOPY やSRCINVERT など)の他、規定していないものとあるので
どの組み合わせで描画すれば意図したものになるかはいろいろ試してみてください。

引用返信 編集キー/
■97763 / inTopicNo.4)  Re[3]: 反転文字列を描画する方法
□投稿者/ ゲッコー (3回)-(2021/07/11(Sun) 18:24:39)
ありがとうございます。

難しそうですね・・・
一筋縄ではいかなそうです・・・

引用返信 編集キー/
■97767 / inTopicNo.5)  Re[4]: 反転文字列を描画する方法
□投稿者/ とっちゃん (730回)-(2021/07/11(Sun) 22:58:01)
No97763 (ゲッコー さん) に返信

> 難しそうですね・・・
> 一筋縄ではいかなそうです・・・
>
そうですね。
文字の描画は単純ではなく境界部分のジャギーを減らすためぼかし処理も入っています(ClearTypeなど)。

なので、出力先のビットマップはClearTypeなどの処理が入らないように
ちょっと工夫してやらないとうまく2値データ化することができません。

他にもテキスト出力はいろいろな加工が施されているので(新旧織り交ぜていろいろとある)
単純に見えて実際には意図した通りにはならないなどもあるので
試行錯誤してみる必要もあると思います。
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ