C#位图:System.ArgumentException“无效的参数”。

时间:2018-10-19 05:05:25

标签: c# bitmap

在将带有图像(ASCII)的文本文件中的图像(.jpg)的信封写入信封时,遇到了“ System.ArgumentException”这样的问题。按照说明(https://www.bilibili.com/video/av5862027/

第二天或第三天,我尝试解决此问题。

代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Drawing;
using System.IO;

namespace ayy
{
    class Program
    {
        static void Main(string[] args)
        {
            FileStream stream = new FileStream(@"meme.txt", FileMode.OpenOrCreate, FileAccess.Write);
            StreamWriter writer = new StreamWriter(stream);

            for (int imageNumber = 0; imageNumber <= 7600; imageNumber++)
            {
                string url = @"C:\Users\Admin\source\repos\badapple\ayy\ba\ba";
                if (imageNumber < 10)
                {
                    url += "00000";
                }
                else if (imageNumber < 100)
                {
                    url += "0000";
                }
                else if (imageNumber < 1000)
                {
                    url += "000";
                }
                else
                {
                    url += "00";
                }
                url += imageNumber.ToString() + ".jpg";
                Bitmap image = new Bitmap(url, true);

                for (int y = 0; y < image.Height; y++)
                {
                    string str = "";
                    for (int x = 0; x < image.Width; x++)
                    {
                        Color pixel = image.GetPixel(x, y);
                        if (pixel.R > 200)
                        {
                            str += "#";
                        }
                        else
                        {
                            str += " ";
                        }
                        writer.WriteLine(str);
                    }
                    Console.WriteLine(url);
                }
                writer.Close();
            }
        }
    }
}

1 个答案:

答案 0 :(得分:1)

usingusingusing

  • 每次您玩某事(或创建一个对象)时,都要检查是否可以使用using语句

  • 如果您希望文件存在,请进行尽职调查并检查文件是否存在

  • 如果要连接路径和文件名,请使用Path.Combine()

  • GetPixel非常慢,因此最好使用LockBits

  • 当您可以使用格式说明符if

  • 时,为什么要大量使用0来添加$"{imageNumber:D5}.jpg"

说实话,我不确定这是否可以解决您的问题,但是无论如何您都比这个地方好得多

using (var stream = new FileStream(@"meme.txt", FileMode.OpenOrCreate, FileAccess.Write))
{
   using (var writer = new StreamWriter(stream))
   {
      for (var imageNumber = 0; imageNumber <= 7600; imageNumber++)
      {
         var dir = @"C:\Users\Admin\source\repos\badapple\ayy\ba\ba";

         var fileName = Path.Combine(dir, $"{imageNumber:D5}.jpg");

         if (File.Exists(fileName))
         {
            throw new FileNotFoundException($"Woah, what now : {fileName}");
         }

         using (var image = new Bitmap(fileName, true))
         {
            for (var y = 0; y < image.Height; y++)
            {
               for (var x = 0; x < image.Width; x++)
               {
                  var pixel = image.GetPixel(x, y);
                  writer.Write(pixel.R > 200 ? "#" : " ");
               }

               writer.WriteLine();
            }
         }
      }
   }
}

如果仍然有问题,请找出导致问题的文件,然后检查它是否实际上是图像并已加载。我的蜘蛛般的感觉告诉我它不是