图像位置不会写入文件,图像也不会从文件位置加载

时间:2014-05-31 22:51:23

标签: vb.net string image object

我想让程序将一个图像位置写入文本文件,然后当用户按下"加载"按钮,它读取该图像位置并将其设置为PictureBox的图像,但到目前为止我还没有成功。

Private Sub Btn_Save_Click(sender As Object, e As EventArgs) Handles Btn_Save.Click
    Dim path As String = My.Computer.FileSystem.SpecialDirectories.MyPictures + "\Card Library\Configs\" + "config_card.aygo"
    Dim path2 As String = My.Computer.FileSystem.SpecialDirectories.MyPictures + "\Card Library\Configs\" + "set_cardimg.aygo"

    ' Create or overwrite the file. 
        Dim fs As FileStream = File.Create(path)
    Dim fs2 As FileStream = File.Create(path2)

    ' Add text to the file. 
    Dim info As Byte() =
        New UTF8Encoding(True).GetBytes(
            "----------Saved Card Settings----------" + vbNewLine +
            "Level: " + My.Settings.Level.ToString + vbNewLine +
            "NoMonster: " + My.Settings.NoMonster.ToString + vbNewLine +
            "Spell: " + My.Settings.Spell.ToString + vbNewLine +
            "Trap: " + My.Settings.Trap.ToString + vbNewLine +
            "XYZLevel: " + My.Settings.XyzLevel.ToString + vbNewLine +
            "ATKValue: " + My.Settings.ATKValue.ToString + vbNewLine +
            "DEFValue: " + My.Settings.DEFValue.ToString + vbNewLine +
            "AttributeID: " + My.Settings.AttributeID.ToString + vbNewLine +
            "CardID: " + My.Settings.CardID.ToString)
    fs.Write(info, 0, info.Length)
    fs.Close()
    Dim info2 As Byte() =
        New UTF8Encoding(True).GetBytes(CardImage.InitialImage.ToString)
    fs2.Write(info2, 0, info2.Length)
    fs2.Close()
    MsgBox("Configuration saved successfully!", vbInformation)
End Sub

Private Sub Btn_Load_Click(sender As Object, e As EventArgs) Handles Btn_Load.Click
    Dim path As String = My.Computer.FileSystem.SpecialDirectories.MyPictures + "\Card Library\Configs\" + "config_card.aygo"
    Try
        My.Settings.Level = CInt(GetSettingItem(path, "level"))
        My.Settings.NoMonster = CInt(GetSettingItem(path, "nomonster"))
        My.Settings.Spell = CBool(GetSettingItem(path, "spell"))
        My.Settings.Trap = CBool(GetSettingItem(path, "trap"))
        If My.Settings.NoMonster = 1 Then
            If My.Settings.Spell = True Then
                CardFt.Card_Spell()
            Else
                If My.Settings.Trap = True Then
                    CardFt.Card_Trap()
                Else
                    CardFt.Card_Legendary()
                End If
            End If
        End If

        My.Settings.XyzLevel = CInt(GetSettingItem(path, "xyzlevel"))
        If My.Settings.XyzLevel = 1 Then
            CardFt.Card_XYZ()
        End If

        My.Settings.ATKValue = GetSettingItem(path, "atkvalue")
        ATKText.Text = GetSettingItem(path, "atkvalue")

        My.Settings.DEFValue = GetSettingItem(path, "defvalue")
        DEFText.Text = GetSettingItem(path, "defvalue")

        My.Settings.AttributeID = CInt(GetSettingItem(path, "attributeid"))
        If My.Settings.AttributeID = 1 Then
            AttributeLayer.Image = My.Resources.Earth
        ElseIf My.Settings.AttributeID = 2 Then
            AttributeLayer.Image = My.Resources.Water
        ElseIf My.Settings.AttributeID = 3 Then
            AttributeLayer.Image = My.Resources.Fire
        ElseIf My.Settings.AttributeID = 4 Then
            AttributeLayer.Image = My.Resources.Wind
        ElseIf My.Settings.AttributeID = 5 Then
            AttributeLayer.Image = My.Resources.Dark
        ElseIf My.Settings.AttributeID = 6 Then
            AttributeLayer.Image = My.Resources.Light
        ElseIf My.Settings.AttributeID = 7 Then
            AttributeLayer.Image = My.Resources.Divine
        End If

        My.Settings.CardID = CInt(GetSettingItem(path, "cardid"))
        CardFt.Card_Loader()


        If My.Computer.FileSystem.FileExists(My.Computer.FileSystem.SpecialDirectories.MyPictures + "\Card Library\Configs\" + "set_cardimg.aygo") Then
            Try
                Dim fileReader As String
                fileReader = My.Computer.FileSystem.ReadAllText(My.Computer.FileSystem.SpecialDirectories.MyPictures + "\Card Library\Configs\" + "set_cardimg.aygo")
            Catch ex As Exception : End Try
        End If

        Dim bitmap As New Bitmap(My.Computer.FileSystem.SpecialDirectories.MyPictures + "Card Library\Configs\" + "set_cardimg.aygo")
        CardImage.Image = CType(bitmap, System.Drawing.Image)

    Catch ex As Exception
        MsgBox("An error occured while loading the configuration file: " & vbNewLine & ex.Message & vbNewLine & vbNewLine & ex.ToString, vbExclamation)
        My.Computer.Clipboard.SetText(ex.ToString)
    End Try
End Sub

我从中得到的错误是:

  

System.ArgumentException:参数无效。      在System.Drawing.Bitmap..ctor(String filename)      在AnimeYuGiOhCardMaker.CardMaker.Btn_Load_Click(对象发件人,EventArgs e)中的C:\ Users \ Compusys \ Documents \ Visual Studio 2012 \ Projects \ Anime Yu-Gi-Oh Card Maker \ Anime Yu-Gi-Oh Card Maker \ Form1.vb :第521行

现在,当按下“保存”按钮时,它不会将图像位置写入文件,但会写入以下内容:

  

System.Drawing.Bitmap

这就是我收到上述错误的原因。 实际错误来自此处:

  

Dim bitmap As New Bitmap(My.Computer.FileSystem.SpecialDirectories.MyPictures +" Card Library \ Configs \" +" set_cardimg.aygo")               CardImage.Image = CType(bitmap,System.Drawing.Image)

即使使用实际文件路径也会发生错误。

我尝试了几种不同的方式,但没有一种方法有效。任何帮助将非常感激。感谢。

- DOM

1 个答案:

答案 0 :(得分:0)

原始问题已经多次改变,包括例外。问题的当前状态有几个问题,主要问题是:

    If My.Computer.FileSystem.FileExists(My.Computer.FileSystem.SpecialDirectories.MyPictures + "\Card Library\Configs\" + "set_cardimg.aygo") Then
        Try
            Dim fileReader As String
            fileReader = My.Computer.FileSystem.ReadAllText(My.Computer.FileSystem.SpecialDirectories.MyPictures _
               + "\Card Library\Configs\" + "set_cardimg.aygo")

        ' EMPTY CATCH !!!!!!
        Catch ex As Exception : End Try   
    End If

    Dim bitmap As New Bitmap(My.Computer.FileSystem.SpecialDirectories.MyPictures _ 
        + "Card Library\Configs\" + "set_cardimg.aygo")
    CardImage.Image = CType(bitmap, System.Drawing.Image)

set_cardimg.aygo只是一个包含一些文本的配置文件。它不是有效的图像文件,因此您无法从中创建位图。

您应该打开该文件,将内容读入变量,然后如果它是有效位置,从中创建位图,或者更好地设置图片框.Location并让它加载图像而不先创建位图