Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

11

20.03.2006, 19:53

danke @scarsen, das guck ich mir mal an!

@ nix da, das is jetzt sicher ne doofe Frage, aber wie würde denn sowas aussehen, gibts da vllt. eine kleine Anleitung, oder ein Beispiel, oder so?

Anonymous

unregistriert

12

20.03.2006, 19:56

Top_se
Ist mega Easy:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
void LoadBitmap24Bit (::HWND__* hwnd, const std::basic_string<wchar_t>& file, HDC *device_context_, HBITMAP *bitmap_)
{
        // Daten für die Ausgabe

    ::HDC__*            device_context      = NULL; // Primärpuffer


        // Daten für das Dateihandling

    void*               file_handle         = NULL; // Handle auf die Datei

    unsigned long       file_recievedbytes  = 0;    // Hilfsvariable für die gelesenen Bytes


        // Daten für die Bitmapdaten

    ::BITMAPFILEHEADER  bitmap_header;              // Bitmap-Header

    ::BITMAPINFO        bitmap_info;                // Bitmapinformationen

    unsigned long       bitmap_size         = 0;    // Größe der Daten

    unsigned char*      bitmap_data         = NULL; // Datenpuffer // signed char?


        // Datei öffnen

    if ((file_handle = ::CreateFileW (file.c_str(), GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL)) == INVALID_HANDLE_VALUE)
        EXCEPTION (L"CreateFileW");

        // Bitmap-Header lesen

    if (!::ReadFile (file_handle, &bitmap_header, sizeof(bitmap_header), &file_recievedbytes,NULL) || file_recievedbytes != sizeof(bitmap_header))
    {
        ::CloseHandle (file_handle);
        EXCEPTION (L"ReadFile");
    }
        
        // Bitmapinformationen lesen

    if (!::ReadFile (file_handle, &bitmap_info.bmiHeader, sizeof(bitmap_info.bmiHeader), &file_recievedbytes, NULL) || file_recievedbytes != sizeof(bitmap_info.bmiHeader) ||
        bitmap_info.bmiHeader.biCompression != BI_RGB ||
        bitmap_info.bmiHeader.biBitCount    != 24)
    {
        ::CloseHandle (file_handle);
        EXCEPTION (L"ReadFile");
    }
    
        // Lesestift von Anfang der Datei zum Beginn der Farbdaten setzen.

    ::SetFilePointer (file_handle, bitmap_header.bfOffBits, NULL, FILE_BEGIN);

        // Größe des benötigten Speichers für das Lesen der Farbdaten errechnen

    bitmap_size = ((bitmap_info.bmiHeader.biWidth + 3) / 4) * 4;
    bitmap_size =  (bitmap_size * (bitmap_info.bmiHeader.biHeight * bitmap_info.bmiHeader.biBitCount)) / 8;

        // Speicher für die Farbdaten bereitstellen

    bitmap_data = new unsigned char[bitmap_size];

        // Farbdaten lesen

    if (!::ReadFile (file_handle, bitmap_data, bitmap_size, &file_recievedbytes, NULL) || file_recievedbytes != bitmap_size)
    {
        ::CloseHandle (file_handle);
        delete [] bitmap_data;
        EXCEPTION (L"ReadFile");
    }

        // Primärpuffer holen

    if ((device_context = ::GetDC (hwnd)) == NULL)
        EXCEPTION (L"GetDC");

        // Kompatiblen Device Context des Primärpuffers erstellen

    if (((*device_context_) = ::CreateCompatibleDC (device_context)) == NULL)
        EXCEPTION (L"CreateCompatibleDC");

        // Kompatible Bitmap des Primärpuffers erstellen

    if (((*bitmap_) = ::CreateCompatibleBitmap (device_context, bitmap_info.bmiHeader.biWidth, bitmap_info.bmiHeader.biHeight)) == NULL)
        EXCEPTION (L"CreateCompatibleBitmap");

        // Bitmap mit den Farbdaten füllen

    if (!::SetDIBits ((*device_context_), (*bitmap_), 0, bitmap_info.bmiHeader.biHeight, bitmap_data, &bitmap_info, DIB_RGB_COLORS))
        EXCEPTION (L"SetDIBits"); 
        
        // Objekte verknüpfen

    ::SelectObject ((*device_context_), (*bitmap_));

        // Temporärer Speicher für die Farbdaten freigeben

    delete [] bitmap_data;

        // Datei schließen

    ::CloseHandle (file_handle);

        // Zeiger auf Primärpuffer freigeben

    ::ReleaseDC(hwnd,device_context);
}

Das Dingen füllt Dir automatisch HDC und HBITMAP ;)

13

20.03.2006, 20:11

Oh, dankeschön!

Das schau ich mir morgen auch mal in Ruhe an und teste es, vielen vielen Dank!

Sheddex

unregistriert

14

20.03.2006, 20:17

@nix da: Was heißt hier mega easy? Ich sterb' fast wenn ich seh was da noch auf mich zukommt... ;)

Anonymous

unregistriert

15

20.03.2006, 20:34

DarkHunter
Wieso? Ist doch logisch aufgebaut? ???

john

Alter Hase

Beiträge: 786

Beruf: Schüler

  • Private Nachricht senden

16

20.03.2006, 20:36

DarkHunter
Lass dich dadurch nicht verunsichern. ;)

edit:
nix da
Klar, auch schön kommentiert. :)
mfg
john

Sheddex

unregistriert

17

20.03.2006, 20:41

@nix da: Nur mal so eine Frage: Würdest du das verstehen wenn du nur Heikos Buch gelesen hast? Wahrscheinlich eher nicht... Außer natürlich man sitzt wochenlang davor und versucht krampfhaft das ganze fast ohne Grundkenntnisse nachzuvollziehen... ;)

[edit]: Wobei, so kompliziert sieht's jetzt auch nicht aus, das einzige was ich wirklich nicht verstehe ist :: vor einer Funktion... ich kenn' das nur beim definieren von Methoden... ihr sollt das jetzt aber nicht erklären, das wird in Davids Buch schon drinstehen^^

Anonymous

unregistriert

18

20.03.2006, 20:47

DarkHunter
Ich sag doch das es nicht kompliziert ist ;) Und das :: hat auch bei mir einen Sinn ;)

19

21.03.2006, 15:54

Hallo!

@ nix da, ähm, wenn ich versuche deine Funktion in meinen Quellcode einzubauen, dann bekomme ich einige Fehlermeldungen beim kompilieren:
http://www.sro.at/bildupload/images/0-Fehlermeldungen.jpg

hab ich eine Bibliothek nicht eingebunden, oder woher kommen die Meldungen, was fehlt?
Danke!

Anonymous

unregistriert

20

21.03.2006, 18:22

Top_se

C-/C++-Quelltext

1
#include <string> // std::basic_string<T>
und EXCEPTION ist was von mir aus meiner Lib.

Werbeanzeige