我想在foreach循环中在PictureBox上绘制文本。这是负责渲染的代码(GG是当前在循环中的PictureBox)
if (GG != null)
{
((PictureBox)GG).Image = (Image)obj;
using (Graphics g = ((PictureBox)GG).CreateGraphics()) {
g.DrawString(i["amount"].ToString(), kryptonRichTextBox1.Font,
new SolidBrush(Color.Gold), new Point(16, 18));
}
}
但遗憾的是,文字没有呈现。如果我注释掉
//((PictureBox)GG).Image = (Image)obj;
行,它确实有效!我不知道如何让它工作。
我想使用TextRenderer,但我不知道如何获取控件的IDeviceContext(我在互联网上看到的所有示例都使用Paint事件中的PaintEventArgs.Graphics)。
此外,如果这是相关的,GG PictureBox是另一个图片框的孩子,并且具有透明背景。
我尝试在无效后刷新框,工作代码:
if (GG != null)
{
((PictureBox)GG).Image = (Image)obj;
((PictureBox)GG).Invalidate();
((PictureBox)GG).Refresh();
using (Graphics g = ((PictureBox)GG).CreateGraphics()) {
g.DrawString(i["amount"].ToString(), kryptonRichTextBox1.Font,
new SolidBrush(Color.Gold), new Point(16, 18));
}
}
答案 0 :(得分:2)
您修改了图片内容,但PictureBox完全没有意识到这一点。您没有重新分配其Image属性。您需要告诉它需要重绘屏幕上显示的图像。添加以下代码:
GG.Invalidate();
答案 1 :(得分:1)
只需在Bitmap
上绘制并在PictureBox
:
// A new bitmap with the same size as the PictureBox
var bitmap = new Bitmap(pictureBox.Width, pictureBox.Height);
//Get the graphics objectm which we can use to draw
var graphics = Graphics.FromImage(bitmap);
//Draw stuff
graphics.DrawString(i["amount"].ToString(), kryptonRichTextBox1.Font,
new SolidBrush(Color.Gold), new Point(16, 18));
//Show the bitmap with graphics image in the PictureBox
pictureBox.Image = bitmap;
答案 2 :(得分:0)
Image digidashboard = new Bitmap(Properties.Resources.digidashboard);
//using (Graphics g = ((PictureBox)pictureBoxDashboard).CreateGraphics())
//{
// g.DrawString("80.00", this.Font, new SolidBrush(Color.Red), 3, 6);
// pictureBoxUnlock.Image = digidashboard;
// pictureBoxDashboard.Invalidate();
//}
Graphics g = Graphics.FromImage(digidashboard);
g.DrawString("80.00", this.Font, new SolidBrush(Color.Red), 3, 6);
pictureBoxDashboard.Image = digidashboard;
根据StevenHouben的回答,我粘贴了我的C#版本。它工作正常。谢谢@StevenHouben。