DDSReader .dds in Picturebox laden

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    DDSReader .dds in Picturebox laden

    Guten Tag,

    ich möchte eine .dds Datei in einer PictureBox laden, jedoch funktioniert mein Code nicht mehr mit der aktuell .dll vom DDSReader und eine alte .dll habe ich leider nicht mehr. Dies sind meine Code Versuche:

    VB.NET-Quellcode

    1. Imports DDSReader
    2. 'Versuch 1
    3. Dim ddsimage As DDSImage("path")
    4. 'Versuch 2
    5. Dim ddsimage1 As New DDSImage("path")
    6. 'Versuch 3
    7. Dim ddsimage2 As DDSImage = Image.FromFile("path")
    8. 'Versuch 4
    9. Dim ddsimage3 As DDSImage = Bitmap.FromFile("path")


    In jedem Fall wird mir nur ein Compilefehler angezeigt, also komme ich gar nicht erst zum Compilen. Nutze ich den falschen Syntax? Ich habe das Internet abgesucht, jedoch keine Hilfe zur DDSReader.dll in vb.net gefunden.

    GitHub: github.com/andburn/dds-reader
    Wenn ich eine Frage stelle, habe ich sie bereits gegooglet. Ja, es kommt vor, dass ich die Antwort übersehe. Ja, es kommt vor, dass ich sie nicht verstehe. Deshalb bin ich hier. Wenn dies eure Frage war, dann antwortet bitte nicht. Es stiehlt sämtliche Motivation.
    @Sekki Die Versuche 3 und 4 können nur fehlschlagen, da das Framework diese Extension nicht unterstützt.
    DDS Bilder
    social.msdn.microsoft.com/Foru…-net-2012?forum=vbgeneral
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @Sekki Kannsta mal ein DDS-Bild anhängen (als ZIP)?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany
    Ich habe die DevilDotNet Libary bereits ausgetestet und es sah vielversprechend aus, jedoch erhalte ich nach dem Auführen der Datei einen Fehler, der besagt, dass ein Fehler im Speicher vorgekommen ist. Dieser Fehlercode war mit inbegriffen: 0x8007000B (Das Kompilieren der Datei hat funktioniert, ich rede von meinem Projekt. Dort tritt der Fehler auf, wenn ich die Image Class mit dem neuen Parameter nutze (ImageExtension.Dds))

    Gewünschte .dds Datei ist im Anhang. Ist ein simpler Schatteneffekt in Bildform. Könnte ich es in eine PictureBox laden, wüsste ich wie es weiter geht.

    @seh
    Mit dieser .dll konnte ich 100% eine .DDS laden. Hier ist der Thread, wo ich mal jemanden geholfen habe und wo es funktioniert hat, jedoch wurde .dll verändert: .dds Image in Picturebox laden

    Ohne einer Libary oder einem Framework kann man in .net in keinem Fall eine .dds laden (sicherlich geht es, jedoch meine ich auf eine verständliche Art und Weise wie z.B bei einem Wrapper)

    @ThuCommix
    Ich habe bereits versucht, auf der GitHub Seite den Syntax zu nutzen und meines Wissens wäre es in vb.net ca. so:

    VB.NET-Quellcode

    1. Dim img As DDSImage = DDSImage("/path/to/dds")


    Ich habe es in sämtlichen Variationen getestet. Jedoch klappt das nicht.

    @FormFollowsFunction
    Bereits versucht, fehlgeschlagen. Könnte natürlich mein Fehler sein, vielleicht habe ich den Syntax falsch in Visual Basic übersetzt. Hättest du Ideen?
    Dateien
    • sky_shader_c.zip

      (17,79 kB, 75 mal heruntergeladen, zuletzt: )
    Wenn ich eine Frage stelle, habe ich sie bereits gegooglet. Ja, es kommt vor, dass ich die Antwort übersehe. Ja, es kommt vor, dass ich sie nicht verstehe. Deshalb bin ich hier. Wenn dies eure Frage war, dann antwortet bitte nicht. Es stiehlt sämtliche Motivation.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Sekki“ ()

    ThuCommix schrieb:

    VB.NET-Quellcode

    1. Dim img As DDSImage = New DDSImage("/path/to/dds")
    2. img.Save("img.png")


    Diesen Syntax habe ich ebenfalls schon versucht, jedoch vergebens. Was ich jedoch jetzt erst sehe, es ist ein Fehler den ich bisher noch gar nicht hatte:

    Schweregrad Code Beschreibung Projekt Datei Zeile Unterdrückungszustand
    Fehler BC31091 Fehler beim Importieren des Typs "Stream" aus der Assembly oder dem Modul "System.Runtime.dll". Testbereich C:\Users\user\source\repos\Testbereich\Testbereich\Form1.vb 5 Aktiv


    Nun kommt mir die Vermutung in den Sinn, dass es nicht an der DDSReader.dll liegt, sondern tatsächlich ein Konflikt in System.Runtime.dll stattfinden könnte.


    Wenn ich eine Frage stelle, habe ich sie bereits gegooglet. Ja, es kommt vor, dass ich die Antwort übersehe. Ja, es kommt vor, dass ich sie nicht verstehe. Deshalb bin ich hier. Wenn dies eure Frage war, dann antwortet bitte nicht. Es stiehlt sämtliche Motivation.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Sekki“ ()

    @Sekki Du brauchst keinen DDS-Reader, das funktioniert mit WPF-Mitteln:
    Spoiler anzeigen

    C#-Quellcode

    1. using System;
    2. using System.Diagnostics;
    3. using System.IO;
    4. using System.Runtime.InteropServices;
    5. using System.Windows;
    6. using System.Windows.Media;
    7. using System.Windows.Media.Imaging;
    8. //#######################################
    9. /// <summary>
    10. /// Reads an image from disk and converts it to 16 BPP grey pixel data
    11. /// </summary>
    12. /// <param name="fileName">path and name of the file</param>
    13. /// <param name="values">memory to store the image</param>
    14. /// <param name="width">out: width of the image</param>
    15. /// <param name="height">out: height of the image</param>
    16. /// <returns>Success</returns>
    17. public static bool ReadPictureGrey16(string fileName, out ushort[] values, out int width, out int height)
    18. {
    19. values = null;
    20. width = 0;
    21. height = 0;
    22. if (string.IsNullOrEmpty(fileName))
    23. {
    24. Debug.Assert(false, "Path is empty");
    25. return false;
    26. }
    27. using (Stream stream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read))
    28. {
    29. BitmapFrame bmp = null;
    30. try
    31. {
    32. BitmapDecoder decoder = null;
    33. decoder = BitmapDecoder.Create(stream, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.None);
    34. bmp = decoder.Frames[0];
    35. }
    36. catch
    37. {
    38. // not supported format
    39. return false;
    40. }
    41. width = bmp.PixelWidth;
    42. height = bmp.PixelHeight;
    43. int stride = bmp.PixelWidth;
    44. // Speicher für das Bild
    45. values = new ushort[height * width];
    46. // bmp.Format ist kein enum
    47. if (bmp.Format == PixelFormats.Gray16)
    48. {
    49. bmp.CopyPixels(values, stride * 2, 0);
    50. }
    51. else if (bmp.Format == PixelFormats.Gray8 ||
    52. bmp.Format == PixelFormats.Indexed8)
    53. {
    54. // 8 BPP-Formate werden explizit als solche eingelesen
    55. byte[] pixels8 = new byte[bmp.PixelHeight * bmp.PixelWidth];
    56. bmp.CopyPixels(pixels8, stride, 0);
    57. // convert 8 BBP to 16 BBP
    58. for (int i = 0; i < values.Length; i++)
    59. {
    60. values[i] = pixels8[i];
    61. }
    62. }
    63. else
    64. {
    65. // 16 BPP *.bmp landet hier
    66. // Alle anderen Formate werden explizit nach 16 BPP Grau konvertiert
    67. FormatConvertedBitmap newImage = new FormatConvertedBitmap(bmp, PixelFormats.Gray16, null, 0.0);
    68. newImage.CopyPixels(values, stride * 2, 0);
    69. newImage = null;
    70. }
    71. return true;
    72. }
    73. }
    Musste noch an Deine Bwedürfnisse anpassen
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!