JPG Array to Bitmap Array



  • Guten Tag,
    ich bin im letzten Ausbildungsjahr zum Elektroniker in EFZ, nun erhielt ich ein bereits begonnenes Projekt und muss die Umwandlung von JPG in BMP vornehmen.

    Beschreibung:
    Mit einem Taster wird eine Foto erstellt, das Kameramodul gibt mir ein Array im JPG-Format zurück. Nun möchte ich dieses JPG Array in ein Bitmap Array umwandeln, damit ich das Bild am Display anzeigen kann.
    Programmiert wird in C++ und auf dem Programm Eclipse.

    Infos zu den Bauteilen:
    Display: Newhaven NHD-2.4-240320SF-CTXL#-FTN1 (http://media.digikey.com/pdf/Data%20Sheets/Newhaven%20Display%20PDFs/NHD-2.4-240320SF-CTXL-FTN1.pdf)
    Mikrocontroller: STM32F407 (http://www.st.com/content/ccc/resource/technical/document/datasheet/ef/92/76/6d/bb/c2/4f/f7/DM00037051.pdf/files/DM00037051.pdf/jcr:content/translations/en.DM00037051.pdf)
    Kameramodul: Mini TTL Serial JPEG von Adafruit (https://cdn-shop.adafruit.com/product-files/1386/1)

    Problem:
    Wie genau kann ich die Umwandlung vom JPG Array ins Bitmap Array vornehmen?
    Habe bereits über die Windows.h library mit der Funktion LoadImage() nachgedacht, jedoch bin ich der Meinung, dass ich mit dieser Funktion nur ein bereits bestehendes Bitmap anzeigen kann? (Korrigiert mich wenn ich mich irre?!)

    Kann mir jemand helfen.

    mit freundlichen Grüssen



  • Benutze die jpeglib.

    Oder aber mittels der GDI+-Funktionen, s. GDI+ - Using Image Encoders and Decoders sowie Using GDI+: How to load a JPG with C++



  • Th69 schrieb:

    Benutze die jpeglib.

    daran habe ich auch schon gedacht, jedoch ist dies schnell in Vergessenheit geraten, weil ich nirgends ein gutes Tutorial bzw. einen guten Beispielcode gefunden habe. 😕

    Hast du per Zufall ein gutes Tutorial bereit?

    Wie gesagt, bin noch in der Ausbildung 😉

    Danke schon mal 😃



  • Habe gerade noch oben eine Alternative (für Windows) hingeschrieben 😉

    Orientiere dich einfach an Converting a BMP Image to a PNG Image und mit ein paar Zeilenänderungen sollte auch JPEG->BMP klappen.



  • Wenn es reicht dass der Code unter Windows läuft, dann würde ich auch GDI+ empfehlen. Das ist wirklich relativ easy zu verwenden, und kann die wichtigsten Formate - also PNG, BMP und JPG (und vermutlich noch ein paar andere).



  • ps:
    Wenn du vermeiden willst die JPEG Daten in ein Temp-File zu schreiben, kannst du den IStream* Konstruktor der Bitmap/Image Klasse verwenden.

    Einen passenden Stream kannst du mit SHCreateMemStream bzw. CreateStreamOnHGlobal erzeugen:
    https://msdn.microsoft.com/en-us/library/windows/desktop/bb773831(v=vs.85).aspx
    https://msdn.microsoft.com/en-us/library/windows/desktop/aa378980(v=vs.85).aspx



  • Th69 schrieb:

    Habe gerade noch oben eine Alternative (für Windows) hingeschrieben 😉

    Orientiere dich einfach an Converting a BMP Image to a PNG Image und mit ein paar Zeilenänderungen sollte auch JPEG->BMP klappen.

    Oke danke vielmals. 🙂

    hustbaer schrieb:

    ps:
    Wenn du vermeiden willst die JPEG Daten in ein Temp-File zu schreiben, kannst du den IStream* Konstruktor der Bitmap/Image Klasse verwenden.

    Einen passenden Stream kannst du mit SHCreateMemStream bzw. CreateStreamOnHGlobal erzeugen:
    https://msdn.microsoft.com/en-us/library/windows/desktop/bb773831(v=vs.85).aspx
    https://msdn.microsoft.com/en-us/library/windows/desktop/aa378980(v=vs.85).aspx

    Am Anfang möchte ich nur mal die Umwandlung vornehmen, da spielt es mir noch nicht so eine wichtige Rolle ob die Daten zwischengespeichert werden. Aber danke dir. Werde mich eventuell später damit beschäftigen 🙂



  • Th69 schrieb:

    Habe gerade noch oben eine Alternative (für Windows) hingeschrieben 😉

    Orientiere dich einfach an Converting a BMP Image to a PNG Image und mit ein paar Zeilenänderungen sollte auch JPEG->BMP klappen.

    Verstehe ich das richtig, dass ich nur die .png Endungen in .bmp umändern muss und die .bmp Endungen zu .jpg umändern muss?

    Oder muss ich dann dort sonst noch irgendetwas ändern?

    Danke schon mal 😃 Seit mir echt ne grosse Hilfe 😉



  • noch eine kleine Frage..

    Hat jemand die Library von Microsoft als Download gefunden?
    Habe leider nur das Headerfile windows.h downloaden können, den Rest der Lib habe ich nirgends gefunden 😞 😕


  • Mod

    josef2.0 schrieb:

    Hat jemand die Library von Microsoft als Download gefunden?
    Habe leider nur das Headerfile windows.h downloaden können, den Rest der Lib habe ich nirgends gefunden 😞 😕

    Die ist bei Windows dabei.



  • SeppJ schrieb:

    josef2.0 schrieb:

    Hat jemand die Library von Microsoft als Download gefunden?
    Habe leider nur das Headerfile windows.h downloaden können, den Rest der Lib habe ich nirgends gefunden 😞 😕

    Die ist bei Windows dabei.

    Also habe das windows.h file ins Projekt kopiert & anschliessend included..

    Im File werden wiederum einige Files included --> viele sind als Warnungen gekennzeichnet, jedoch bei dem excpt.h file ist es ein Fehler..

    Hab nun das excpt.h file gedownloadet, jedoch fehlt bei dem wieder ein .h file.. 😞
    Diesmal ist es _mingw.h

    Kann mir jemand helfen?



  • Man lädt üblicherweise nicht einzelne .h Files runter.
    Wirf die weg und fang neu an.

    Auf Windows empfiehlt es sich Visual Studio zu verwenden - z.B. Visual Studio 2015 Community Edition - das ist gratis.
    Da solltest du dann auch erstmal keine weiteren Dinge runterladen/einbinden müssen, da dort ein halbwegs aktuelles SDK dabei ist.

    Und falls doch mal was fehlt ist der übliche Weg zu gucken in welchem SDK die nötigen Header und Lib Files drinnen sind, und dann das SDK runterzuladen & zu installieren. Und bei Visual Studio die nötigen Pfade einzutragen damit die Files des installierten SDKs gefunden werden.
    Falls du das mal benötigst einfach danach googeln - ist auch alles vielfach im Netz beschrieben.



  • oke, schon gelöscht 👍

    Nun das Problem ist, das mein Arbeitsplatz mit Eclipse ausgerüstet ist und das ganze Büro hauptsächlich auf Eclipse arbeitet.
    Es wäre einfacher für mich nun mit Eclipse weiterzufahren und die Librarys einzubinden.
    Die SDK sollte man online downloaden können, nicht?

    Ansonsten werd ich wohl auf VS arbeiten müssen..

    Danke dir für die Antworten 👍 👍



  • Siehe
    http://stackoverflow.com/questions/2022112/can-g-mingw-play-nice-with-the-windows-sdk-is-visual-studio-the-only-option

    There are some header files and libraries that are pretty much fundementally incompatible with GCC, like GDI+. If you want to use GDI+, you'll need to use a Microsoft compiler.

    Antwort aus dem Jahr 2012. Ob sich seit damals 'was geändert hat weiss ich nicht.

    Aber grundsätzlich ist bzw. war es immer lästig GCC bzw. Clang für Windows Programme zu verwenden. Spätestens sobald man etwas benötigt, was das SDK, das mit der jeweiligen Distribution von GCC/Clang mitkommt, nicht mit drinnen hat. Weil das Einbinden des originalen Windows SDK eben nicht so ohne weiteres funktioniert.

    Wenn es wichtig ist dass das Programm mit GCC bzw. Clang compiliert, und du GDI+ damit nicht gebacken bekommst, kannst du natürlich immer noch auf eine andere Library ausweichen. z.B. DevIL, FreeImage oder eben direkt die libjpeg die ja bereits vorgeschlagen wurde.



  • Oke ein grosses Dankeschön hustbaer 👍 👍

    Werde dies wahrscheinlich mit der jpeglib versuchen. 🙂

    Sollte ein Problem auftreten melde ich mich wieder.

    MFG Josef



  • Moment, wie ist das jetzt zu verstehen? Machst du die Umwandlung auf dem Microcontroller oder auf einem PC?
    Weil ich den Eindruck habe, dass das hier gar nicht so klar ist wie manche denken.

    [Falls auf PC, werfe ich hier noch boost::gil und opencv in den pot an libs. aber die sind dafür grundsätzlich erstmal overkill.]



  • 5cript schrieb:

    Moment, wie ist das jetzt zu verstehen? Machst du die Umwandlung auf dem Microcontroller oder auf einem PC?
    Weil ich den Eindruck habe, dass das hier gar nicht so klar ist wie manche denken.

    [Falls auf PC, werfe ich hier noch boost::gil und opencv in den pot an libs. aber die sind dafür grundsätzlich erstmal overkill.]

    Auf nem Mikrocontroller wäre die Idee..
    --> STM32F407



  • Auf nem Mikrocontroller wäre die Idee..
    --> STM32F407

    dann kannst du dir VS2015 sparen - damit kommst du nicht weit - nur wenn du dich komplett auf dem Windows PC befindest bringt dir das was

    dein Eclipse könnte schon die richtigen Tools beinhalten - wie bist du denn auf Eclipse gekommen? Vorgabe?

    Zeig bitte mal sauber auf wo welche Code-Teile laufen sollen(oder sogar muessen z.B. weil Vorgabe) - sonst bringen dir die Tips hier gar nichts

    also Fragen:
    1. wieso nutzt du bisher Eclipse?
    2. kannst du schon kompilieren und etwas auf dem Mikrocontroller ausführen (egal was)
    3. wo genau sollen(müssen) welche Code-Teile laufen
    4. muss die Verarbeitung auf dem Mikrocontroller laufen - ich denke ja

    4 Fragen = 4 Antworten



  • Dann ist aber die Aussage

    josef2.0 schrieb:

    Habe bereits über die Windows.h library mit der Funktion LoadImage() nachgedacht.

    verwirrend. 😕

    Die Frage ist also, welches SDK verwendest du für den Microcontroller?



  • Habe bereits über die Windows.h library mit der Funktion LoadImage() nachgedacht

    und

    Ausbildungsjahr zum Elektroniker in EFZ

    sollte ausreichend sein um zu verstehen das er einfach keinen Überblick hat und google eben zu jpeg und bmp ziemlich viel ausspuckt

    erstmal soll er die 4 Fragen von mir beantworten dann sehen weiter


Anmelden zum Antworten