【问题标题】:Working with user input images on C# console在 C# 控制台上处理用户输入图像
【发布时间】:2019-07-24 10:21:59
【问题描述】:

我正在开发一个将图像叠加在另一个图像之上的程序,到目前为止它可以工作,但唯一的问题是我需要为要用作程序基础的图像文件设置路径工作。

有没有办法让程序可以在不使用特定路径的情况下接受任何 png 文件?所述程序将用于快速为图片加水印(例如,假设用户有一张他/她想要加水印的照片,他们会将 png 文件拖到构建的可执行文件中,它会给编辑后的图片加上水印)

(它必须在控制台上,我不能使用 wpf 或表单)。

【问题讨论】:

  • "any .png" 文件一样,它只找到一个?用户通过文件路径随机选择一个?
  • 抱歉没有指定,我的意思是用户选择一张照片并使用可执行文件打开它(该程序用于快速为照片添加水印)
  • 目前用户如何将图像路径传递给 exe?用户究竟是如何使用 exe 打开照片的?
  • edit 发帖而不是添加说明作为 cmets(“用户选择照片并打开它”也不太清楚 - 他们在哪里选择照片?)
  • (我怀疑stackoverflow.com/questions/3788429/… 是你要问的......但这还不清楚)

标签: c# image user-input


【解决方案1】:

您可以使用控制台应用程序的第一个命令行参数来接收路径。然后,要使用它,用户会将 png 文件拖放到 exe 中(拖放到资源管理器中的图标中)。然后,该 exe 将以用户拖动的文件的路径作为第一个参数运行,然后正常执行。

事实上,如果用户要拖放多个文件,它们都会被当作一个单独的命令行参数。

当没有文件被拖动时,你想告诉用户如何使用你的 exe。另外,您可以保留Console.ReadLine 作为替代输入法。

附录:您可以将文件拖放到控制台窗口中,它的行为就像用户输入了路径一样。这也应该有效......事实上,如果你把上面提到的Console.ReadLine 放在上面,两种方式都可以。 只有一个文件,在默认控制台和powershell中测试过。

我让您检查文件类型。事实上,它也适用于文件夹,根据需要处理它们(例如,您可以使用Directoy.GetFilesDirectory.EnumerateFiles)。

基本思路是这样的(没有错误检查):

static void Main(string[] args)
{
    if (args.Length == 0 )
    {
        Console.WriteLine("Command line Usage: ConsoleAppName.exe filePath");
        Console.WriteLine("You can drag and drop files into the executable to use it");
        // Optional: take a path from Console.ReadLine
    }
    else
    {
        foreach (var filePath in args)
        {
            Console.WriteLine($"Processing: {filePath}");
            // Optional: check if folder and handle correctly
            ProcessFile(filePath);
        }
        Console.WriteLine("All done");
    }
    Console.WriteLine("[Press any key to exit]");
    Console.ReadKey();
}

我假设文件检查发生在 ProcessFile


当然,您可以在控制台应用程序中引用 System.Drawing

而不是获取扩展名或尝试获取文件的标题。我建议尝试加载图像 (Bitmap(string))。这样,它将支持 GDI+ 可以加载的所有格式(BMP、GIF、EXIF、JPG、PNG 和 TIFF),即使扩展名错误也会这样做。 这也意味着如果图片不是一种受支持格式的图片,您会收到 ArgumentException

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-03
    • 2018-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多