【问题标题】:Empty Bitmap when converting from Graphics to Bitmap从图形转换为位图时为空位图
【发布时间】:2012-07-25 15:04:51
【问题描述】:

我使用库从这里http://www.codeproject.com/Articles/42529/Outline-Text绘制轮廓文本

我为测试编写了一个函数,我试图将 outlineText 图形对象保存为位图 图形对象正确绘制在控件上,但是当我将其另存为图像时,结果图像为空

        Graphics graphic = this .CreateGraphics();
        graphic.SmoothingMode = SmoothingMode.AntiAlias;
        StringFormat fmt = new StringFormat(StringFormat.GenericTypographic);
        Int32 lNum = (Int32)Math.Log((Double)this.TextAlign, 2);
        fmt.LineAlignment = (StringAlignment)(lNum / 4);
        fmt.Alignment = (StringAlignment)(lNum % 4);

        OutlineText m_OutlineText = new OutlineText();            

        m_OutlineText.EnableShadow(true);
        m_OutlineText.SetNullShadow();
        m_OutlineText.Shadow(ShadowColor, ShadowSize, new Point(4, 4));
        FontFamily fontFamily = this.Font.FontFamily;
        float fStartX = 0.0f;
        float fStartY = 0.0f;
        float fDestWidth = 0.0f;
        float fDestHeight = 0.0f;
        m_OutlineText.MeasureString(
            graphic,
            fontFamily,
            this.Font.Style,
            (int)this.Font.Size,
            this.Text,
            new Point(10, 10),
            fmt,
            ref fStartX,
            ref fStartY,
            ref fDestWidth,
            ref fDestHeight);

        LinearGradientBrush gradientBrush = new LinearGradientBrush(new RectangleF(fStartX, fStartY, fDestWidth - (fStartX - 10), fDestHeight - (fStartY - 10)),
           GrediantA, GrediantB, LinearGradientMode.Vertical);
        m_OutlineText.TextOutline(gradientBrush, OutlineColor, OutlineSize);
        if (_myRc == null)
        {
            _myRc = ClientRectangle;
        }
        m_OutlineText.DrawString(graphic, fontFamily, this.Font.Style, (int)this.Font.Size, this.Text, _myRc, fmt);


      _textImage = new Bitmap(this.Width, this.Height, graphic);
      _textImage.Save(@"C:\bmp.jpg");

【问题讨论】:

    标签: c# winforms gdi+


    【解决方案1】:

    构造函数:Bitmap(Int32, Int32, Graphics) 用指定的大小和指定的 Graphics 对象的分辨率初始化 Bitmap 类的新实例。它应该是空的。只会使用 Graphics 的分辨率。

    如果你想在位图上绘制一些东西并保存它,而不是从位图创建图形:

    using(Bitmap bitmap = new Bitmap(Width, Height))
    using (Graphics graphics = Graphics.FromImage(bitmap))
    {
        Rectangle rect = new Rectangle(0, 0, Width, Height);
        graphics.FillRectangle(new SolidBrush(BackColor), rect);
        graphics.DrawString("Hello, World", Font, new SolidBrush(ForeColor), rect);
        bitmap.Save(@"D:\hello_world.bmp");
    } 
    

    如果您想在控件上绘图并将其图像保存到文件,请使用Control.DrawToBitmap 方法。

    BTW 位图应该有.bmp 扩展名,它不是JPEG 图像。

    【讨论】:

      猜你喜欢
      • 2018-02-23
      • 2015-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多