2016-03-20 22 views
-1

Ich versuche gerade, mehrere Bilder in ein einziges zusammengesetztes Bild zu schichten, das aus mehreren Körperteilen für das Porträt eines Spielers besteht.Warum kann mein GetManifestResourceStream mein Bild nicht finden?

Normalerweise für Bilder aus den Ressourcen und packen sie in eine Picturebox/etc Ich würde einfach ".Image = My.Resources.ResourceManager.GetObject (Dateiname)".

Allerdings muss ich auf eine Bitmap übertragen, die keine Objekte akzeptiert. Ich habe den folgenden Code aus ein paar Google-Ergebnissen gefunden, aber die Datei wird ignoriert, da "Wert von null für 'Stream' nicht gültig ist" und der pHead ist "Nothing". Daher nehme ich an, dass der Code die Datei nicht finden kann.

Die Unterbrechung verursacht in der letzten Zeile des folgenden Codes.

Jede Hilfe oder einfachere Alternativen wäre sehr willkommen.

Dim GenderText As String = "" 
Select Case ListCharacter(ActiveChar).Gender 
    Case eGender.Male : GenderText = "masc" 
    Case eGender.Female : GenderText = "fem" 
End Select 

Dim Prefix As String = "" 
Dim Suffix As String = ".png" 
Dim myAsm As System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly() 

' Load Head Image 
' e.g. prt_fem_head_1_white.png 
Dim headImageName As String = "prt_" & GenderText & "_head_" & CharApp.HeadStyle & "_" & CharApp.SkinColour 
Dim pHead As Bitmap = New Bitmap(myAsm.GetManifestResourceStream(Me.GetType, headImageName & Suffix)) 

Screenshot

ps. Fehlt auch mit/ohne Suffix.

Bearbeiten # 1;

Ich habe das Präfix, soweit ich sagen kann, zum Aufenthaltsort des Ressourcenstamms gefunden. Dies funktioniert jedoch immer noch nicht zu einer Variation. Screenshot2

Bearbeiten # 2;

Ich habe den Speicherort der Ressource über seine Eigenschaften überprüft.

"C: \ Benutzer \ CLEO \ Documents \ Visual Studio 2015 \ Projects \ Storytime \ Storytime \ Resources \ prt_fem_head_1_white.png"

+0

ich den Code genauer auf eine vorbestehende Bild brechen versucht habe ich an anderer Stelle als Objekt verwendet haben. Ich habe folgendes versucht; - Storytime.Resources.Hoof.png ::: - Storytime.Resources.Hoof ::: - Resources.Hoof.png ::: - Resource.Hoof ::: - Hoof ::: - Hoof. png ::: –

+0

Nun, Sie tun es falsch. Sie müssten ResourceReader verwenden, um den Manifest-Ressourcenstream zu dekodieren und die Bitmap aus dem Stream auszugraben. Dadurch erhalten Sie immer noch das exakt gleiche Objekt, das ResourceManager.GetObject() bereitstellt, so dass Sie nicht vollständig head sind. Sehr schwer zu erraten, was "Objekte nicht akzeptiert" könnte möglicherweise bedeuten, dass Sie die falsche Frage gestellt haben. –

Antwort

-1

gelöst. Ich habe den Code für einen einfacheren Code in meinem Resources Designer-Code geändert. Das Unten ist sehr roh und muss aufgeräumt werden, aber so konnte ich mehrere Bilder in eine Picture Box einbauen.

' Load Face 
    Dim PortraitLocation As New Point(573, 51) 
    Dim CharApp As New Character.cAppearance : CharApp = ListCharacter(ActiveChar).Appearance 
    ' Dim pHead, pEyes, pNose, pMouth, pBase, pHair As New PictureBox 
    Dim FaceCanvas As New PictureBox 

    Dim GenderText As String = "" 
    Select Case ListCharacter(ActiveChar).Gender 
     Case eGender.Male : GenderText = "masc" 
     Case eGender.Female : GenderText = "fem" 
    End Select 

    Dim resourceCulture As Global.System.Globalization.CultureInfo 

    Dim headImageName As String = "prt_" & GenderText & "_head_" & CharApp.HeadStyle & "_" & CharApp.SkinColour 
    Dim obj As Object = My.Resources.ResourceManager.GetObject(headImageName, resourceCulture) 
    Dim phead As Bitmap = CType(obj, System.Drawing.Bitmap) 

    Dim eyesImageName As String = "prt_" & GenderText & "_eyes_" & CharApp.EyeStyle & "_" & CharApp.SkinColour 
    Dim obj2 As Object = My.Resources.ResourceManager.GetObject(eyesImageName, resourceCulture) 
    Dim pEyes As Bitmap = CType(obj2, System.Drawing.Bitmap) 

    Dim noseImageName As String = "prt_" & GenderText & "_nose_" & CharApp.NoseStyle & "_" & CharApp.SkinColour 
    Dim obj3 As Object = My.Resources.ResourceManager.GetObject(noseImageName, resourceCulture) 
    Dim pNose As Bitmap = CType(obj3, System.Drawing.Bitmap) 

    Dim mouthImageName As String = "prt_" & GenderText & "_mouth_" & CharApp.MouthStyle & "_" & CharApp.SkinColour 
    Dim obj4 As Object = My.Resources.ResourceManager.GetObject(mouthImageName, resourceCulture) 
    Dim pMouth As Bitmap = CType(obj4, System.Drawing.Bitmap) 

    Dim hairImageName As String = "prt_" & GenderText & "_hair_" & CharApp.HairStyle & "_" & CharApp.HairColour 
    Dim obj5 As Object = My.Resources.ResourceManager.GetObject(hairImageName, resourceCulture) 
    Dim pHair As Bitmap = CType(obj5, System.Drawing.Bitmap) 

    Dim bodyImageName As String = "prt_" & GenderText & "_body_" & CharApp.SkinColour 
    Dim obj6 As Object = My.Resources.ResourceManager.GetObject(bodyImageName, resourceCulture) 
    Dim pBody As Bitmap = CType(obj6, System.Drawing.Bitmap) 


    Dim g As Graphics = Graphics.FromImage(pBody) 
    g.DrawImage(phead, 0, 0) 
    g.DrawImage(pEyes, 0, 0) 
    g.DrawImage(pNose, 0, 0) 
    g.DrawImage(pMouth, 0, 0) 
    g.DrawImage(pHair, 0, 0) 
    With FaceCanvas 
     .Location = PortraitLocation 
     .Size = New Size(50, 50) 
     .Image = pBody 
     .BackColor = Color.Transparent 
    End With 
    Me.Controls.Add(FaceCanvas) 

pic0 pic1

Verwandte Themen