【问题标题】:C# create multiple images and save them [closed]C#创建多个图像并保存它们[关闭]
【发布时间】:2023-04-04 03:50:01
【问题描述】:

我想创建多个以数字为中心的 200x200 图像,并将它们以相应的文件名自动保存到文件夹中。仅此而已,仅此而已。

我想最好用一个图像框来试试这个,然后用一个循环在上面写,但我一无所获。有什么想法吗?

【问题讨论】:

    标签: c# loops save


    【解决方案1】:

    你在正确的轨道上,伙计。然而;要完成您想要的,您需要调用 System.Drawing 命名空间中的“图形”类。

    你要完成的任务很简单。

    首先循环遍历您要创建的图像

    假设你想要 5 张图片

    ...调用for循环!

    for (int I = 0; I < 5; I++) { }
    

    在循环中,我们要创建一个可编辑的 200x200 图像。 我更喜欢 'Bitmap' 类来完成这个。

    创建位图后,我将为它创建图形。 然后我将在大约绘制字符串。中心。如果想要100%居中,可以使用MeasureString函数

    最终代码:

    for (int I = 0; I < 5; I++) {
        Bitmap B = new Bitmap(200, 200);
        Graphics G = Graphics.FromImage(B);
        G.DrawString(I.ToString(), this.Font, Brushes.Black, new PointF(100.0f, 100.0f);
        B.Save(System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolders.Desktop), I + ".png"))) // Save on the desktop
    }
    

    我还没有尝试过这段代码,但我认为它可以工作。可能需要少量修改:)

    【讨论】:

    • 这不会将文本定位在死点,而是从中心开始绘制。因此,如上所述,需要StringFormat 或将其定位在死点的东西。只是指出更多:)
    • 谢谢,但是.. The best overloaded method match for 'System.Drawing.Graphics.DrawString(string, System.Drawing.Font, System.Drawing.Brush, System.Drawing.RectangleF)' has some invalid arguments, cannot convert from 'int' to 'string', cannot convert from 'System.Drawing.Point' to 'System.Drawing.RectangleF'.. 所有在线 G.DrawString
    • 两秒。我会修复它:)
    • 现在像魅力一样工作,非常感谢!
    【解决方案2】:

    这可能就像使用一种方法来完成艰苦的工作一样简单:

    public void CreateImageWithText(string text)
    {
        using (var b = new Bitmap(200, 200))
        {
            using (var g = new Graphics.FromImage(b))
            {
                using (var f = new Font("Arial", 12, FontStyle.Bold, GraphicsUnit.Point))
                {
                    var strFormat = new StringFormat();
                    strFormat.Alignment = StringAlignment.Center;
                    strFormat.LineAlignment = StringAlignment.Center;
    
                    g.DrawString(text, f, Brushes.Blue, new Rectangle(0,0,200,200), strFormat);
                }
            }
            b.Save("C:\\image.jpg", ImageFormat.Jpeg);
        }
    }
    

    然后在for循环中做:

    for (var i = 0; i < 5; i++)
        CreateImageWithText(string.Format("{0}", i));
    

    如果您打算多次调用它,请记住正确处理您的 Bitmaps、GraphicsFont 实例。这就是我的方法中的 using 语句的用途。

    【讨论】:

    • 谢谢,但我在这里遇到两个错误。“当前上下文中不存在名称 'ImageFormat'”和“'System.Drawing.Graphics.FromImage(System.Drawing.Image )' 是一种“方法”,但用作“类型”。
    • 看起来我必须专门指定 System.Drawing.Imaging.. 但是,我仍然无法摆脱第二个错误..'System.Drawing.Graphics.FromImage(System.Drawing.Image)' is a 'method' but is used like a 'type'.
    • 我将这部分内容与@dotTutorials' 结合起来,现在可以使用了:)再次感谢!
    【解决方案3】:

    对不起,我只拿到了我的手机...

    在伪代码中

    创建一个循环。

    Inside the loop create a bitmap
        // for i=0...
        // using (var BMP = new bitmap(dimensions))
        {
        // get graphics 
           Using (graphics g = graphics.fromimage(BMP))
        {
        // draw text
        Text render.draw text()
        // save image
        }
        }
    

    【讨论】:

      猜你喜欢
      • 2011-09-03
      • 1970-01-01
      • 1970-01-01
      • 2012-04-04
      • 2021-04-24
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      • 2015-10-12
      相关资源
      最近更新 更多