[英]Use picturebox as a canvas and draw text
我想将PictureBox用作画布,并在其上绘制一些文本并保存。
我写了这段代码,但不确定即时通讯是否以正确的方式进行:
Bitmap b = new Bitmap(pictureBox1.Width, pictureBox1.Height);
Graphics g = Graphics.FromImage(b);
g.FillRectangle(new SolidBrush(Color.White), new Rectangle(0, 0, pictureBox1.Width, pictureBox1.Height)); // i used this code to make the background color white
g.DrawString("some text", new Font("Times New Roman", 20), new SolidBrush(Color.Red), new PointF(10, 10));
pictureBox1.Image = b;
这段代码效果很好,但是当我想更改图像的背景色时,我必须重绘文本。
有没有一种方法可以更改背景颜色而不必重绘文本?
编写Paint程序很有趣,但是您需要针对所有或大部分所需的功能进行预先计划。
到目前为止,您有以下这些:
这里还有一些您需要的东西:
以下是一些不错的东西:
有些事情比其他事情难( *
)或要难得多( ***
),但是当您决定为时已晚打补丁时, 所有事情都会变得很难。
请阅读有关PictureBoxes
这篇文章 (从“实际上”开始),它说明了它是Paint程序的理想选择。
您的原始代码和您的问题有以下问题:
您没有参数化任何内容,最值得注意的是,文本的绘制应使用几个变量:
绘制线条或矩形后,情况同样如此。
因此,这里有一些提示如何做到正确的:
使用Picturebox
的BackgroundColor
和/或BackgroundImage
动态更改背景!
收集所有要绘制在List<someDrawActionclass>
通过将其绘制到 Picturebox的Image
组合所有图形
使用Paint
事件在移动鼠标时绘制诸如临时矩形或线条之类的辅助内容。 在MouseUp
,将其添加到列表中。
因此,到最后,让我们修复您的代码..:
您可以使用以下功能设置背景:
void setBackground(Color col, string paperFile)
{
if (paperFile == "") pictureBox1.BackColor = col;
else pictureBox1.BackgroundImage = Image.FromFile(paperFile);
}
您可以这样称呼它: setBackground(Color.White, "");
要将一段文本绘制到 PictureBox
的Image
中,首先请确保您有一个:
void newCanvas()
{
Bitmap bmp = new Bitmap(pictureBox1.ClientSize.Width, pictureBox1.ClientSize.Height);
pictureBox1.Image = bmp;
}
现在,您可以编写一个函数来编写文本。 您真的不应该对任何设置进行硬编码,更不用说文本了! 这只是一个快速且非常肮脏的示例..:
void drawText()
{
using (Font font = new Font("Arial", 24f))
using (Graphics G = Graphics.FromImage(pictureBox1.Image))
{
// no anti-aliasing, please
G.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SingleBitPerPixel;
G.DrawString("Hello World", font, Brushes.Orange, 123f, 234f);
}
pictureBox1.Invalidate();
}
有关如何创建drawAction类以存储绘图所构成的所有内容的一些说明,请参见此处和此处 。
最后一点是如何保存PictureBox
所有层:
void saveImage(string filename)
{
using (Bitmap bmp = new Bitmap(pictureBox1.ClientSize.Width,
pictureBox1.ClientSize.Height))
{
pictureBox1.DrawToBitmap(bmp, pictureBox1.ClientRectangle);
bmp.Save("yourFileName.png", ImageFormat.Png);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.