[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2005/02/07(Mon) 17:37
投稿者名:しょほしょほ
Eメール:
URL :
タイトル:
テキストの中抜き
 PictureBoxにテキストの輪郭線だけを
描画する方法って有りませんでしょうか?

何方か御指導下さいますよう宜しく御願いいたします。

投稿時間:2005/02/07(Mon) 17:52
投稿者名:ダンボ
URL :
タイトル:
Re: テキストの中抜き
実際に試していませんが、下記のAPIで実現できると思っています。

BeginPath
TextOut
EndPath
PathToRegion
FrameRgn

すみませんが、各々の説明等が出来るほどの知識が無いので、ヒントまでということで。

投稿時間:2005/02/07(Mon) 20:56
投稿者名:しょほしょほ
Eメール:
URL :
タイトル:
Re^2: テキストの中抜き
ダンボ様
早速の情報有難う御座います。
調べてみます。

> 実際に試していませんが、下記のAPIで実現できると思っています。
>
> BeginPath
> TextOut
> EndPath
> PathToRegion
> FrameRgn
>
> すみませんが、各々の説明等が出来るほどの知識が無いので、ヒントまでということで。

投稿時間:2005/02/08(Tue) 11:08
投稿者名:ダンボ
URL :
タイトル:
ヒントのサンプル
自分の勉強のために作ってみました。基本は下記で良いのですが、フォント幅が1なので結果的に
中抜き文字にならなかった(笑)
そこで花ちゃんさんのサンプル「文字列を角度及び扁平率を指定して印字(233)」
hhttp://www.bcap.co.jp/hanafusa/VBHLP/kakudofo.htm
を参考にして、太字のフォントで試したところ気持ちよく中抜けました。
表示結果を「わいわいがやがや広場」に掲載しておきますね。
hhttp://bbs4.aimix-z.com/gbbs.cgi?room=hanafusa

With Picture1
.Cls
BeginPath .hdc
  RTN = TextOut(.hdc, 10, 10, Text1.Text, Len(Text1.Text))
EndPath .hdc
hRgnC = PathToRegion(.hdc)
If hRgnC <> 0 Then
   RTN = FrameRgn(.hdc, hRgnC, GetStockObject(BLACK_BRUSH), 1, 1)
   RTN = DeleteObject(hRgnC)
End If
End With

投稿時間:2005/02/09(Wed) 09:39
投稿者名:ダンボ
URL :
タイトル:
(質問)リージョンデータのOS管理方法
便乗質問です。

前提知識
・どんな形のリージョンでも出来る。
・OSはリージョンを複数の四角形に分解して管理しているらしい。

TrueTypeフォントなどは、主要点を抜き出すベクター型のデータ管理方式ですが、リージョンはそうとは予想で
きない。
滑らかな境界のリージョンを定義するために、どういう方法でデータを分解記憶しているのだろうか?
全ピクセルまで分解すれば滑らかになるが、リージョンの大きさは画面を越えても良さそうなので膨大なデータ
量になる。
従って、どこかで妥協するがリージョンの形により妥協点が異なるだろう。

というあたりが好奇心的疑問なので、Webを検索してみましたが、利用例は多いもののOS内部の事情については
説明ページが見つかりませんでした。正確性は問いませんがなにかコメントありましたらよろしくお願いしま
す。

投稿時間:2005/02/09(Wed) 11:20
投稿者名:K.J.K.
Eメール:akiya@koalanet.ne.jp
URL :
タイトル:
Re: (質問)リージョンデータのOS管理方法
(GDI)リージョンは(GDI)メタファイルと同じような方法(つまり関数・メソッド単位)
で保管しているのでは。

投稿時間:2005/02/10(Thu) 09:23
投稿者名:ダンボ
URL :
タイトル:
(お礼)GDI リージョン メタファイル
K.J.Kさん、どうもありがとうございました。

「GDI リージョン メタファイル」のキーワードでgoogle検索すると、面白そうなページが
複数見つかりましたので、しばらくそちらの方向から勉強します。

ちなみに「リージョン管理」のキーワード検索はヒットが多すぎて駄目ですね。リージョン=領域
なので、大分一般的なキーワードだったみたいです。GDIで絞り込むのがよいのかも。

投稿時間:2005/02/15(Tue) 09:44
投稿者名:ダンボ
URL :
タイトル:
(推測)リージョンデータのOS管理方法
> ・どんな形のリージョンでも出来る。
> ・OSはリージョンを複数の四角形に分解して管理しているらしい。
> 滑らかな境界のリージョンを定義するために、どういう方法でデータを分解記憶しているのだろうか?
> 全ピクセルまで分解すれば滑らかになるが、リージョンの大きさは画面を越えても良さそうなので膨大なデー
量になる。


その後、「任意の形のフォームを作る」(SetWindowRgn,CreateRectRgn,CombineRgn)を勉強した結果、
滑らかなリージョンを作るには、結局全ピクセルまで分解し記憶しているのだなという確信が得られました。
膨大なデータ量になる。スマートではない。そのリージョンの拡張性は無い(変形できない)?
もっとも、リージョンの変形に関するAPIを見かけたつもりなので、それも追求してみます。

投稿時間:2005/02/15(Tue) 10:28
投稿者名:K.J.K.
Eメール:akiya@koalanet.ne.jp
URL :
タイトル:
Re: (推測)リージョンデータのOS管理方法
BitmapやMemDCと絡めてある場合と、絡めてない場合と、を
区別すべきでは。

複雑な形状のリージョンを作成することと、それを描画する
ことでは、どちらが時間のかかる処理であるのか、そして、
どの段階で時間がかかってしまうのか、についても考えて
みてもいいでしょう。

あとは、DDK(Driver Development Kit)のグラフィックドライバ
関連のところも調べるとか。