【问题标题】:How to make the Bitmap Constructor take a string如何使位图构造函数采用字符串
【发布时间】:2013-06-26 22:43:33
【问题描述】:

我知道以前有人问过这个问题,但我找不到适合我具体情况的答案。我正在尝试从资源图像创建新的位图。

private void button1_Click(object sender, EventArgs e)
    {

        string test = "meridian_am";
        string resources = "Resources.Properties.Resources." + test;

        var master = new Bitmap(Resources.Properties.Resources.master);
        var meridian_am = new Bitmap(resources);

        using (Graphics g = Graphics.FromImage(master))
        {
            g.DrawImageUnscaled(meridian_am, 114, 332);
        }
     }

由于某种原因,对于 *var meridian_am = new Bitmap(resources)* 我得到一个无效参数错误。最终,我宁愿在运行中进行字符串连接,如 var meridian_am = new Bitmap(Resources. Properties.Resources.+ 测试),但由于某种原因无法正常工作......有什么想法吗?

【问题讨论】:

    标签: c# bitmap


    【解决方案1】:

    我不是 C# 方面的专家,但是...对于 var master = ...,您传递的 资源 很可能是图像或类似的东西,而对于 var meridian = ...,您正在传递重新传递 string 作为参数,它应该是可访问文件的路径。 希望对您有所帮助。

    编辑:

    我说的是this constructorthis one

    【讨论】:

    • 它们都是可访问的文件路径.. 都使用资源作为文件路径
    • 我需要它们都是资源,因为它是一个桌面应用程序,我想用解决方案编译图像
    • 您的意思是Resources.Properties.Resources.master 的值本身也是一个字符串,因此它包含类似“C:\...\myfile.png”的内容?否则,您将打包资源与字符串进行比较,该字符串应该是 executed 程序可访问的 external 文件的名称
    • 我什至不知道.. 该文件是一个 C# 资源,它是在使用 VS 资源 UI 时添加的。 Resources.Properties.Resources.master 是我指出的方式,但是,我需要使其可调整,以便允许用户输入
    【解决方案2】:

    Resources.Properties.Resources.master 是否包含图像字节或字符串(文件名的路径)?在任何情况下,您都不能将原始字符串“Resources.Properties.Resources.meridian_am”传递给位图构造函数。它将其视为文件的路径,而不是您的资源。

    您之前应该从该名称的资源中加载数据。类似的东西(如果您的资源包含图像字节):

    var assembly = System.Reflection.Assembly.GetEntryAssembly();
    var resources = assembly.GetManifestResourceStream("Resources.Properties.Resources." + test);
    

    【讨论】:

    • 它包含实际的图像...如果我只使用字符串作为文件,图像不会被编译成实际的解决方案吗?
    • 现在我遇到了错误 'null' 的值对 'stream' 无效。 我运行了一个 messageBox 来检查它的值:* MessageBox.Show(Convert .ToString(resources));* 它返回为空
    • 是的,当然,如果引用文件路径就不会编译。所以只需使用我评论中的代码,但一定要使用正确的资源名称(带有完整的命名空间声明)。
    • 您传递的资源名称不正确 - GetManifestResourceStream 返回 null(找不到)。请看以下建议:1.stackoverflow.com/questions/15276969/… 2.stackoverflow.com/questions/10726857/…
    • 所以一旦我使用了你的两条线,我会不会只使用 var meridian_am = new Bitmap(resources);。我不会?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-23
    • 2014-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-25
    相关资源
    最近更新 更多