我有我自己的簡單3d引擎類(myGraphics
),它將結果保存在Bitmap變量中。 然後,該位圖被放置在一個圖片框(PictureBox.Image = myGraphics.bmp
)如何在WindowsForms Picturebox上繪製字符串?
這是行之有效的,問題出現時,我需要在繪圖上標記一些點。由於沒有內置的在位圖上繪製字符串的方法,因此我在類似問題中遵循瞭解決方案,現在我在myGraphics
上得到了一個Graphics
變量,因此我可以在那裏繪製數字。有代碼的重要位如下:
public class myGraphics
{
public Graphics g;
public void initialize(int W, int H)
{
//sets some values
g = Graphics.FromImage(bmp);
g.SmoothingMode = SmoothingMode.AntiAlias;
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.PixelOffsetMode = PixelOffsetMode.HighQuality;
}
public void draw()
{
// code to draw on myGraphics.bmp
markpoints();
}
public void markpoints()
{
if (draw_points) {
foreach (objecto ob in solidos) {
for (int p = 0; p < ob.viewpoints.Count; p++)
{
// determine position of text (x, y)
SolidBrush drawBrush = new SolidBrush(Color.Black);
g.DrawString(p.ToString(), new Font("Arial", 10), drawBrush, x, y);
g.Flush();
}
}
}
}
現在,如果我這樣做是正確,g.Flush()應在合併位圖圖形克,但它不工作這樣,所以我得到的正確的形象,但沒有蜇傷它。
我也試過這樣:myGraphics.g = PictureBox.CreateGraphics();
來解決它。在調試模式下使用斷點時,我意識到字符串確實出現在使用此方法的控件上,但在PictureBox更新後立即被擦除。
所以,我怎麼能解決這個問題,這樣我就可以在圖紙上顯示的數字?
要修改的位圖,但沒有任何辦法,該圖片框就可以知道這一點。 Image類沒有事件。所以它不知道它需要重新繪製圖像。現在知道,您可以調用PictureBox的Invalidate()方法。 –
這不是問題,但它使我得到它,所以謝謝。這是一個愚蠢的錯誤,我仍然會寫一個答案 –