LoadImage findet BMP nicht

OP #7001427
Lesenswert?

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 #7001464
Lesenswert?

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 #7003069
Lesenswert?

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 #7003087
Lesenswert?

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 #7003095
Lesenswert?

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 #7003107
Lesenswert?

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 #7003115
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren