投稿者 魔界の仮面弁士  (社会人) 投稿日時 2016/8/11 22:59:30
> mozi.Image = canvas
> Me.mozi.BackColor = Color.Transparent

mozi だったり Me.mozi だったりと、表記が混在していますが、
この 2 つは同じ変数でしょうか?
(前者がローカル変数、後者がフィールド変数という可能性もありますが…)



> 文字を描画しているところのコードはこちらです。
ざっくり書くと、
 Dim canvas As New Bitmap(Rtext.Width, Rtext.Height)
 Dim g As Graphics = Graphics.FromImage(canvas)
 Dim bc As SolidBrush = New SolidBrush(Rtext.ForeColor)
 g.DrawString(drawString, fnt, bc, 0.0F, 0.0F, sf)
 mozi.Image = canvas
ということですよね。
文字色を司っているのは、上記でいうと変数 bc にあたります。


ですから、文字色を変えたいのであれば、
 Dim oldImage As Image = mozi.Image
 Dim newImage As New Bitmap(oldImage.Width, oldImage.Height)
 Dim g As Graphics = Graphics.FromImage(canvas)
 Dim bc As SolidBrush = New SolidBrush(mozi.ForeColor)   '★ 
 g.DrawString(drawString, fnt, bc, 0.0F, 0.0F, sf)
 mozi.Image = newCanvas
 oldImage.Dispose()
 fnt.Dispose()
 bc.Dispose()
 sf.Dispose()
 g.Dispose()
という感じです。


注意するとすれば、
> Me.mozi = New PictureBox()
のように、新しい PictureBox をもう一つ作るのではなく、
すでに作成済みの PictureBox (すなわち mozi)に対して
処理を行う必要がある、ということです。


もし、この処理が何度も呼ばれていて、Panel 上に複数の PictureBox が
配置されているのであれば、それらの`PictureBox それぞれに対して
新しい Bitmap を用意し、以前と同じ文字列を、新しい色で描画して
割り当てていく必要がありますね。