如何从位图创建图像并保存

时间:2011-06-07 21:07:35

标签: c#-4.0

以下是我试图开展工作的示例代码,但到目前为止还没有运气。

            Bitmap bitmap = new Bitmap((Stream)Cache["images"]);
            Graphics g = Graphics.FromImage(bitmap);

            StringFormat strFrmt = new StringFormat();
            strFrmt.Alignment = StringAlignment.Center;

            SolidBrush btmForeColor = new SolidBrush(Color.Green);
            SolidBrush btmBackColor = new SolidBrush(Color.Black);

            Font btmFont = new Font("Verdana",7);
            SizeF textSize = new SizeF();
            textSize = g.MeasureString("Copyright", btmFont);

            float x = ((float) bitmap.Width - textSize.Width - 3);
            float y = ((float) bitmap.Height - textSize.Height - 3);
            float w = ((float) x + textSize.Width);
            float h = ((float) y + textSize.Height);

            RectangleF textArea = new RectangleF(x,y,w,h);
            g.FillRectangle(btmBackColor,textArea);

            g.DrawString("Copyright",btmFont,btmForeColor,textArea);
            btmForeColor.Dispose();
            btmBackColor.Dispose();
            btmFont.Dispose();
            g.Dispose();

从代码中可以看出,我是在获取Stream和creatin位图,然后对位图进行一些更改,现在我想保存我的位图对象,但是无法弄清楚如何,我做了一些研究在互联网上,但所有的例子/文章/论坛帖子都是针对服务器上有一些图像文件的情况,并且想要进行更改,在我的情况下,我只是有一些流,并希望在特定路径中保存位图对象。我怎样才能做到这一点 ?任何形式的帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

当然它只是bitmap.save?或其重载之一? g实际上是在绘制位图。

**更新

        Bitmap bitmap = new Bitmap(@"C:\Users\mike\Pictures\Panasonic\P1000016.jpg");
        Graphics g = Graphics.FromImage(bitmap);

        StringFormat strFrmt = new StringFormat();
        strFrmt.Alignment = StringAlignment.Center;

        SolidBrush btmForeColor = new SolidBrush(Color.Green);
        SolidBrush btmBackColor = new SolidBrush(Color.Black);

        Font btmFont = new Font("Verdana", 90);
        SizeF textSize = new SizeF();
        textSize = g.MeasureString("Copyright", btmFont);

        float x = ((float)bitmap.Width - textSize.Width - 3);
        float y = ((float)bitmap.Height - textSize.Height - 3);
        float w = ((float)x + textSize.Width);
        float h = ((float)y + textSize.Height);

        RectangleF textArea = new RectangleF(x, y, w, h);
        g.FillRectangle(btmBackColor, textArea);

        g.DrawString("Copyright", btmFont, btmForeColor, textArea);
        btmForeColor.Dispose();
        btmBackColor.Dispose();
        btmFont.Dispose();
        g.Dispose();
        bitmap.Save(@"C:\Users\mike\Pictures\Panasonic\P1000016_0.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);

这对我有用,但不得不增加字体大小。

答案 1 :(得分:0)

我似乎找到了解决方案

var photoPath = Server.MapPath("~/" + AsyncFileUpload1.FileName);


            if (File.Exists(photoPath))
            {
                File.Delete(photoPath);
            }
using (var mainFile = File.Create(photoPath))
            {
                // dostuff()
                bitmap.Save(mainFile, image.RawFormat);

            }

我必须在保存之前创建文件。谢谢你迈克和我在一起,我真的很感激!!!