Wie verweise ich auf die richtige DLL, wenn ich einen bestimmten Namespace verwenden will?

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von -Franky-.

    Wie verweise ich auf die richtige DLL, wenn ich einen bestimmten Namespace verwenden will?

    Hallo,
    ich bin neu hier und das ist mein erster Post...
    Wahrscheinlich ist meine Frage einfach zu beantworten, wenn man mehr Erfahrung hat. Aber ich komme einfach nicht weiter.
    Ich habe bisher nur mit Windows Forms gearbeitet und möchte nun aber etwas neues integrieren, ohne mit WPF neu anzufangen.

    Ich möchte eine BMP-Datei lesen, verändern und wieder als Bild speichern. Es muss nicht notwendigerweise angezeigt werden.
    Ich möchte dazu Klassen aus dem Windows.Graphics.Imaging Namespace benutzen.

    Ich habe in meiner Function jetzt zwei neue Variablen deklariert. Das hat erst funktioniert, nachdem ich im Projekt einen Verweis
    auf PresentationCore.dll hinzugefügt habe. Und ich musste statt dem Windows.Graphics.Imaging Namespace den System.Windows.Media.Imaging
    Namespace benutzen, was mich wundert. Aber es scheint soweit zu funktionieren, d.h. diese beiden Zeilen werden jetzt akzeptiert:

    VB.NET-Quellcode

    1. Dim objBMPBitmapDecoder As System.Windows.Media.Imaging.BmpBitmapDecoder

    VB.NET-Quellcode

    1. Dim objBMPBitmapEncoder As System.Windows.Media.Imaging.BmpBitmapEncoder


    Das Problem taucht auf, nachdem ich jetzt folgende Zeile hinzufügen will:

    VB.NET-Quellcode

    1. Dim objSoftwareBitmap As Windows.Graphics.Imaging.SoftwareBitmap

    oder

    VB.NET-Quellcode

    1. Dim objSoftwareBitmap As System.Windows.Media.Imaging.SoftwareBitmap

    Beides funktioniert nicht, obwohl auch SoftwareBitmap eine Klasse des Windows.Graphics.Imaging Namespace ist.
    <siehe : docs.microsoft.com/en-us/uwp/a….imaging?view=winrt-19041 >

    Ich habe hier zwei Posts gefunden, der wahrscheinlich auch in diese Richtung geht. Aber das hilft mir nicht weiter:
    <siehe: Richtiges Arbeiten mit Verweisen und Assemblyinformationen >
    <siehe: Imports vs. Verweise >

    Ich weiß nicht, wie ich herausfinden kann, auf welche .DLL ich verweisen muss, wenn ich einen Namespace benutzen will!
    Kann mir das bitte jemand erklären? Danke!
    Hi!

    Ich glaub System.Windows.Media ist nicht so gut - das ist Wpf, und ziemlich gewöhnungsbedürftig.
    Nimm lieber Namespace System.Drawing, oder wenns hochkommt Namespace System.Drawing.Imaging
    Da müsste eiglich auch genügend Kram drin rumfahren für ein bischen Bildverarbeitung.

    Müsste was mit System.Drawing.Bitmap sein, und System.Drawing.Graphics



    Hans-Peter schrieb:

    Ich weiß nicht, wie ich herausfinden kann, auf welche .DLL ich verweisen muss, wenn ich einen Namespace benutzen will!
    Kann mir das bitte jemand erklären? Danke!
    Namespaces sind nicht notwendigerweise in einer DLL drin. Ach ist schwierig zu erklären.
    Aber hier hab ich Filmle gemacht, da kommt auch mein Lieblings-Tool, der ObjectBrowser vor: VisualStudio richtig nutzen (Google ist nicht deine Mami)
    Mittm OB kann man sich alle DLLs, Namespaces, Klassen und Kram angucken - vlt. bringt dich das ja bisserl weiter.

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

    @'Hans-Peter
    Wenn Du eine Windows Forms App als Projekt auswählst, musst Du keinen extra Verweis setzen. Standardmäßig ist bereits der Verweis auf die System.Drawing gesetzt. Kannst auch im Projektmappen-Explorer unter Verweise nachschauen. Und hier hast auch gleich einen einfachen Code dazu. Das mit dem fnt ist nur ein Beispiel wie man einen Text auf das Bild zeichnet. Im "Using gra As Graphics ..." kannst Du weitere Sachen auf dein Bitmap zeichnen. Wichtiger ist der erste Using-Block um die Schreibsperre des geladenen Bildes zu umgehen. Dies aber auch nur falls Du die geladene Datei unter dem selben Dateinamen wieder speichern möchtest.
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Option Strict On
    2. Option Explicit On
    3. Public Class Form1
    4. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    5. Dim bmp As Bitmap
    6. Dim imf As Imaging.ImageFormat
    7. Dim filename As String = "C:\test.bmp"
    8. ' Datei laden
    9. Using bmporg As New Bitmap(filename)
    10. ' ImageFormat vom Original ermitteln damit die zu speichernde
    11. ' Bitmap ebenfalls im gleichen ImageFormat gespeichert wird
    12. imf = bmporg.RawFormat
    13. ' Kopie erstellen, sonst kannst nicht unter dem gleichen
    14. ' Dateinamen abspeichern.
    15. bmp = New Bitmap(bmporg)
    16. End Using
    17. ' Font erstellen
    18. Using fnt As New Font("Arial", 20, FontStyle.Bold Or FontStyle.Underline, GraphicsUnit.Pixel)
    19. ' Grapics von Bitmap erstellen
    20. Using gra As Graphics = Graphics.FromImage(bmp)
    21. ' evtl. noch ein AntiAlias für den zu zeichnenden String setzen
    22. gra.TextRenderingHint = Drawing.Text.TextRenderingHint.AntiAlias
    23. ' Text mit Font an Position 1,1 zeichnen
    24. gra.DrawString("Test", fnt, Brushes.Black, 1, 1)
    25. End Using
    26. End Using
    27. ' Bitmap speichern
    28. bmp.Save(filename, imf)
    29. ' freigeben
    30. bmp.Dispose()
    31. End Sub
    32. End Class


    Hans-Peter schrieb:

    ch möchte eine BMP-Datei lesen, verändern und wieder als Bild speichern

    Jetzt müsstest nur noch genau erklären was Du mit "verändern" meinst. Je nachdem was Du machen möchtest kommen andere Möglichkeiten der Bildbearbeitung in Betracht.
    Mfg -Franky-
    @Hans-Peter Willkommen im Forum.
    Fang einfach ganz klein an:

    VB.NET-Quellcode

    1. Using bmp = New Bitmap(DEIN_PFAD_ZUR_BITMAP)
    2. bmp.SetPixel(0, 0, Color.Black)
    3. bmp.Save(EIN_WEITERER_PFAD, System.Drawing.Imaging.ImageFormat.Png) ' Das Format muss zur Extension passen
    4. End Using
    Werde ein wenig warm mit .NET und dann sehen wir weiter.
    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!
    Guten Morgen,
    und schon mal vielen Dank. 3 Antworten sind mehr als ich erwartet hatte :)
    Ich werde wahrscheinlich erst am Wochenende wieder die Zeit finden an dem Thema weiterzuarbeiten. Der heutige Tag ist ziemlich verplant und den Rest der Woche muss ich arbeiten.
    Außerdem muss ich erst mal die Antworten genauer analysieren, denn ich weiß noch nicht genau wie mir das weiterhilft. Also gebt mir etwas Zeit...
    bis dann
    Hallo Zusammen,

    es war ein guter Tipp im Namespace

    Visual Basic-Quellcode

    1. System.Drawing.xyz​
    zu bleiben. Nachdem ich noch eine Zeit mit der BitmapData.Stride EIgenschaft gekämpft habe, ist jetzt mein Programmrahmen fertig.
    Jetzt kann ich mich damit beschäftigen wie nun genau ich die Pixel manipulieren will ohne immer mit SetPixel und GetPixel arbeiten zu müssen. Da wollte ich hin...
    Vielen Dank!
    Hans-Peter
    PS: Ich versuche gerade das Thema als "erledigt" zu markieren. Ich versuche es gleich noch mal...

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Hans-Peter“ ()

    Hi

    Hans-Peter schrieb:

    Jetzt kann ich mich damit beschäftigen wie nun genau ich die Pixel manipulieren will ohne immer mit SetPixel und GetPixel arbeiten zu müssen.

    Kommt drauf an was Du machen möchtest. Du kannst per LockBits/UnlockBits -> über BitmapData.Scan0 direkt auf die Pixel im Speicher zugreifen und manipulieren. Für bestimmte andere Sachen geht auch einiges über eine ColorMatrix oder ImageAttribute.
    Mfg -Franky-