如何使用c#代码生成随机大图像文件?

时间:2016-09-21 15:34:59

标签: c# .net image

我需要使用以下条件生成数以千计的随机但唯一的图像文件(.jpeg / tiff / png)并将其放入所选的文件夹中:

生成的文件具有给定的分辨率,大小(例如每个100mb),但可以是任何虚拟随机颜色/图案等...

有什么方法可以使用c#或任何其他编程技术生成这个?

1 个答案:

答案 0 :(得分:0)

这是我在一个项目中使用的代码,用于在中间快速生成带有随机“白噪声”和指定文本(也可以是随机)的jpeg图像:

    private static void GenerateDummyJpegAt(string outputPath, string nameToEmbed, int width, int height) {
        using (var bmp = new Bitmap(width, height, PixelFormat.Format24bppRgb)) {
            BitmapData data = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.WriteOnly, bmp.PixelFormat);
            byte[] noise = new byte[data.Width*data.Height*3];
            new Random().NextBytes(noise); // note that if you do that in a loop or from multiple threads - you may want to store this random in outside variable
            Marshal.Copy(noise, 0, data.Scan0, noise.Length);
            bmp.UnlockBits(data);
            using (var g = Graphics.FromImage(bmp)) {
                // draw white rectangle in the middle
                g.FillRectangle(Brushes.White, 0, height/2 - 20, width, 40);
                var fmt = new StringFormat();
                fmt.Alignment = StringAlignment.Center;
                fmt.LineAlignment = StringAlignment.Center;
                // draw text inside that rectangle
                g.DrawString(nameToEmbed, SystemFonts.DefaultFont, Brushes.Black, new RectangleF(0, 0, bmp.Width, bmp.Height), fmt);
            }
            using (var fs = File.Create(outputPath)) {
                bmp.Save(fs, System.Drawing.Imaging.ImageFormat.Jpeg);
            }
        }
    }

用法:

GenerateDummyJpegAt(@"G:\tmp\dummy.jpg", "Some random string", 800, 600);

结果:

enter image description here