Konsolenanwendung: Bildhöhe und breite ermitteln

  • VB.NET
  • .NET 5–6

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

    Konsolenanwendung: Bildhöhe und breite ermitteln

    Servus,

    ich habe eine Konsolenanwendung. Mit dieser muss ich die Höhe und die Breite eines Bildes ermitteln. Bei einer WindowsForm könnte ich ja die Klasse Image verwenden. Diese wird mir aufgrund der fehlenden GUI nicht bereitgestellt. Wie erhalte ich nun die Höhe und die Breite eines Bildes? diese steht ja im Eigenschaftenfenster unter "Details" drinnen. Wie komme ich nun an diese Daten? Das Bild liegt einmal auf meiner Festplatte und einmal online auf einem Server, welcher über das Web erreichbar ist.
    Hi

    Ich hab noch keine Konsolenanwendung geschrieben. Daher wundere ich mich das man da die Image/Bitmap-Klasse nicht verwenden kann.

    What ever. Du kannst die entsprechenden GDI+ APIs auch direkt verwenden um entsprechende Infos zu ermitteln. Du kannst auch die WIC-APIs/COM Interfaces nutzen. Du kannst auch entsprechende Infos über das COM-Interface IPropertyStore ermitteln. Ach da fallen mir sicher noch mehr Möglichkeiten ein.
    Mfg -Franky-
    Da das Programm später auf einem Linux Server laufen muss, kann ich leider die WCI-APIs/COM nicht verwenden und da ich für die GDI+ möglichkeit die Windows.Forms importieren muss fällt diese leider auch flach.
    __________________Edit_________________________
    Was mich auch wundert, ich finde auch keine möglichkeit, die EXIF-Daten des Bildes Auszulesen....

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

    Hi

    Für GDI+ muss man nicht die Win-Forms importieren. Die Image\Bitmap-Klasse ist nur ein Wrapper für die Funktionen in der gdiplus.dll und diese kann man auch direkt ansprechen. Nun kenne ich mich auch nicht mit Linux aus und weiß daher auch nicht welche (Windows) Bibliotheken da unterstützt werden. Falls da die gdiplus.dll funktioniert, kann man über die gdiplus.dll auch die Exif-Daten auslesen. Aber du wolltest doch nur die Dimensionen des Bildes, da brauch man keine Exif-Daten für.
    Mfg -Franky-
    @trix0 Was sind das für Bildformate? Jpg / Jpeg? Dann kannst du die Bildgröße und Auflösung ermitteln, indem du dir ein Programm schreibst, das durch das Byte-Array iteriert und es ausliest. Ich habe eben bei meinem Programm geschaut. Es ist allerdings ziemlich wüst.

    Wundere dich übrigens nicht: Nicht jedes Jpeg enthält alle Metadaten. Ein Bild von einem Smartphone enthält zwar das Aufnahmedatum, aber nicht immer den Standort
    Und ein Jpg, das mit Paint gespeichert wurde, enthält noch weniger Metadaten. Größe ist aber immer vorne in der Definition mit drin, klar

    Du musst nur auf den Kompressionsstandard achten. Da er unterschiedlich sein kann, musst du auf verschiedene Bytefolgen prüfen. Wenn du Interesse hast, mach ich mich mal an die Arbeit und schreib was Neues. Allerdings nicht heute – ich bin total erkältet

    @-Franky- Naja, das war ja auch nur ein Gedankengang von mir. Da die Bilder ja alle die Höhe und Breite in den EXIF-Daten vorliegen. Aber leider weiß ich nicht, wie ich darauf zugreifen kann.

    @Bartosz Bei mir sind die Bilder im JPEG Format. Das mit den Byte-Array ist mir schon in den Sinn gekommen, aber ich weiß leider nicht, wie ich da die Höhe und die Breite daraus ermitteln soll. Diese sollten eigentlich ja auch in den Byte-Array auftauchen.
    @trix0
    Wie geschrieben, funktionieren überhaupt Windows-DLLs unter Linux? Wenn ja, brauchst Du, kurz überflogen, 5 Funktionen aus der gdiplus.dll.

    GdiplusStartup (Initialisiert GDI+), GdipCreateBitmapFromFile oder GdipLoadImageFromFile (Bild von Platte laden), GdipGetImageDimension (Höhe und Breite des Bildes ermitteln), GdipDisposeImage (Dispose des Bildes) und GdiplusShutdown (GDI+ beenden).

    Wenn nicht, dann wirst Du wohl den JPEG Header auswerten müssen. Google mal nach 'jpeg header width height'.
    Mfg -Franky-
    @trix0 Das funktioniert alles wie bei WinForm.
    Du musst lediglich die System.Drawing-DLL Deinen Projekt-Verweisen hinzufügen, die ist per Default bei Console-Apps nicht drin.
    Nutze dann die Bitmap-Klasse und feddich.
    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!