LoadImage findet BMP nicht

OP #7001427
Hey zusammen,

ich hatte mal ein Bsp. wie man eine *.bmp in der Konsole anzeigt.
Gefühlt vor ca. 10-15 Jahren hat es noch funktioniert,
jetzt sagt der Error-Code, dass die Datei nicht gefunden wird.

Wisst Ihr evtl. eine Lösung?
1
#include <windows.h>
2
#include <stdio.h>
3
#include <tchar.h>
4
#pragma comment(lib,"gdi32.lib")
5

6
int LoadBmp2Console(char *szBitmap, int PosX, int PosY)
7
{
8
  DWORD err;
9

10
  HBITMAP hBitmap = (HBITMAP)LoadImage(NULL, LPCWSTR("D:\\a.bmp"),
11
    IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
12
  if (!hBitmap)
13
  {
14
    err = GetLastError();
15
    return 1;
16
  }
17

18
  BITMAP bmp;
19
  GetObject(hBitmap, sizeof(bmp), &bmp);
20

21
  HWND hwnd = FindWindow(L"ConsoleWindowClass", NULL);
22
  if (!hwnd) return 2;
23

24
  HDC hDC = GetDC(hwnd);
25
  if (!hDC) return 3;
26

27
  HDC hBitmapDC = CreateCompatibleDC(hDC);
28
  if (!hBitmapDC) return 4;
29

30
  SelectObject(hBitmapDC, hBitmap);
31

32
  BitBlt(hDC, PosX, PosY, bmp.bmHeight, bmp.bmWidth, hBitmapDC, 0, 0, SRCCOPY);
33

34
  DeleteObject(hBitmap);
35
  ReleaseDC(hwnd, hBitmapDC);
36
  ReleaseDC(hwnd, hDC);
37

38
  return 0;
39
}
40

41
int main()
42
{
43
  char buf[32] = "D:\\a.bmp";
44
  int Status = LoadBmp2Console(buf, 10, 10);
45
  if (Status != 0)printf("Fehler: %i", Status);
46

47
  getchar();
48
  return 0;
49
}

Edit:
Kompiliert ohne Fehler mit VisualStudio 2017.

Original war es von "www.cpp-programming.de.vu" (siehe Anhang)
Angehängte Dateien:
Gast
Adam P. schrieb:
> Sind doch 2.

Ah, nur die Mobilversion zeigt die nicht an, macht natürlich Sinn. 
Desktop-Version am Mobilgerät ist auch korrekt. Im Code-Tag ists auch 
richtig...

Adam P. schrieb:
> Auch schon versucht.

Genau so?
1
LoadImageW(NULL, L"D:\\a.bmp",
2
    IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);

Den char *szBitmap Parameter müsstest du auch nach LPCWSTR ändern, und 
buf auf wchar_t, wenn du das für den Dateinamen verwendest...
OP
Programmierer schrieb:
> Das "buf" wurde im originalen Code aber gar nicht verwendet :|

Ja das stimmt.

Zu beachten ist natürlich, dass jeder Output im Bereich der BMP, die BMP 
zerstört.

Weiterhin ist mir aufgefallen, dass man den darzustellenden Bereich mal 
2 rechnen muss...kp warum. Sonst zeichnet er nur das halbe Bild.
1
BitBlt(hDC, PosX, PosY, bmp.bmHeight*2, bmp.bmWidth*2, hBitmapDC, 0, 0, SRCCOPY);
Angehängte Dateien:
OP
Programmierer schrieb:
> Hmm, verrückt. Bilder hab ich sonst immer per GUI-Anwendung dargestellt
> ;-)

Ja ich suche einen einfachen Weg, um eine BMP darzustellen.
Jedoch werde ich mir wohl aus meinem Konsolen-Prog. ein richtiges 
Fenster erzeugen und sie dort zeichnen.

Ziel:
Da ich nicht immer meine Hardware (µC, Display, usw.) mitschleppen 
möchte (Arbeit / Wohnung), will ich mir eine kleine Umgebung schreiben, 
in der ich das Display simuliere.
So kann ich von überall Menüsteuerungen oder Zeichenroutinen 
weiterentwicklen, da sich so nur der Treiber unterscheidet.
Gast
Adam P. schrieb:
> Jedoch werde ich mir wohl aus meinem Konsolen-Prog. ein richtiges
> Fenster erzeugen und sie dort zeichnen.

Ist sicherlich flexibler... Der Code zum Zeichnen ist beim Win32-API 
dann sogar identisch, nur halt mit vorgegebenem HWND. Allerdings ist die 
Programmierung mit Win32-API schon ziemlich mühsam.

Adam P. schrieb:
> will ich mir eine kleine Umgebung schreiben,
> in der ich das Display simuliere.

Sowas hab ich mal mit einer Gtk+-Anwendung gemacht.
OP
Programmierer schrieb:
> Der Code zum Zeichnen ist beim Win32-API
> dann sogar identisch, nur halt mit vorgegebenem HWND. Allerdings ist die
> Programmierung mit Win32-API schon ziemlich mühsam.

Ja deshalb sollte der Aufwand überschaubar sein.

Programmierer schrieb:
> Sowas hab ich mal mit einer Gtk+-Anwendung gemacht.

Ich wollte mich jetzt nicht unbedingt noch in eine LIB einarbeiten.
Gast
Adam P. schrieb:
> Ich wollte mich jetzt nicht unbedingt noch in eine LIB einarbeiten.

Kommt darauf an wie viel Erfahrung du mit GUI-Programmierung mit dem 
WinAPI hast. Wenn da keine ist, lohnt es sich kaum sich da 
einzuarbeiten, denn es ist umständlich und natürlich nicht portabel. Da 
kannst du dich besser in so etwas wie Gtk+ bzw. GTKmm, wxWidgets o.ä. 
einarbeiten, das ist einfach und geht fix.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 4 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.