创建位图并保存在C#中的文件,可以在位图上进行空文字



i具有以下代码,该代码会添加一个字符串并将其添加到内存中的位图,从而将其保存为BMP文件。我目前的代码如下;

string sFileData = "Hello World";
string sFileName = "Bitmap.bmp";
Bitmap oBitmap = new Bitmap(1,1);
Font oFont = new Font("Arial", 11, FontStyle.Bold, System.Drawing.GraphicsUnit.Pixel);
int iWidth = 0;
int iHeight = 0;
using (Graphics oGraphics = Graphics.FromImage(oBitmap))
{
    oGraphics.Clear(Color.White);
    iWidth = (int)oGraphics.MeasureString(sFileData, oFont).Width;
    iHeight = (int)oGraphics.MeasureString(sFileData, oFont).Height;
    oBitmap = new Bitmap(oBitmap, new Size(iWidth, iHeight));
    oGraphics.DrawString(sFileData, oFont, new SolidBrush(System.Drawing.Color.Black), 0, 0);
    oGraphics.Flush();
}
oBitmap.Save(sFileName, System.Drawing.Imaging.ImageFormat.Bmp);

我遇到的问题是,当我在油漆中查看BMP文件时,位图的大小正确定义,背景是白色的,但是它们不是文本?

我在做什么错?

您正在创建Bitmap对象,然后在using语句中绑定Graphics对象。但是,您然后销毁该Bitmap对象,并创建一个失去原始绑定的新对象。尝试仅创建Bitmap一次。

编辑

我看到您正在尝试将Graphics对象用于两个目的,一个用于测量事物,一个可以绘制。这不是一件坏事,但正在引起您的问题。我建议阅读本文中的主题,以替代测量字符串的替代方法。我将从我个人最喜欢的特定答案中使用助手课程。

public static class GraphicsHelper {
    public static SizeF MeasureString(string s, Font font) {
        SizeF result;
        using (var image = new Bitmap(1, 1)) {
            using (var g = Graphics.FromImage(image)) {
                result = g.MeasureString(s, font);
            }
        }
     return result;
    }
}
string sFileData = "Hello World";
string sFileName = "Bitmap.bmp";
Font oFont = new Font("Arial", 11, FontStyle.Bold, System.Drawing.GraphicsUnit.Pixel);
var sz = GraphicsHelper.MeasureString(sFileData, oFont);
var oBitmap = new Bitmap((int)sz.Width, (int)sz.Height);
using (Graphics oGraphics = Graphics.FromImage(oBitmap)) {
    oGraphics.Clear(Color.White);
    oGraphics.DrawString(sFileData, oFont, new SolidBrush(System.Drawing.Color.Black), 0, 0);
    oGraphics.Flush();
}
oBitmap.Save(sFileName, System.Drawing.Imaging.ImageFormat.Bmp);

看来您正在将位图中游交换。您似乎正在执行以下操作:

  1. 创建一个位图
  2. 获取位图
  3. 获取图形句柄
  4. 创建具有不同大小的新位图

问题是您仍在使用与旧(第一个)位图关联的图形句柄(从步骤2),而不是新的(第二)位图。

您需要使用与新(第二个)位图关联的图形句柄,而不是旧的(第一个)位图。

最新更新