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

$nooc

Alter Hase

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

21

20.09.2006, 15:44

also hier mal die definition von LoadBitmap()

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
bool Graphics_LoadBitmap(const wchar_t *pFilename, HDC *pDC, HBITMAP *phBitmap)
{
    HDC                 dcMainWindow;
    HANDLE              hFile;
    unsigned long       ulBitmapSize;
    BITMAPINFO          bmInfo;
    BITMAPINFOHEADER    bmFile;
    unsigned long       ulBytesRead;
    char                *pBitmapData = NULL;

        // Open file

    if(((hFile = CreateFile(pFilename, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL))) == INVALID_HANDLE_VALUE)
    {
        return false;
    }

    if((!ReadFile(hFile, &bmFile, sizeof(BITMAPFILEHEADER), &ulBytesRead, NULL)) || (ulBytesRead != sizeof(BITMAPFILEHEADER)))
    {
        CloseHandle(hFile);
        return false;
    }

    if(!ReadFile(hFile, &bmInfo.bmiHeader, sizeof(BITMAPINFOHEADER), &ulBytesRead, NULL) || ulBytesRead != sizeof(BITMAPINFOHEADER) || bmInfo.bmiHeader.biCompression != BI_RGB || bmInfo.bmiHeader.biBitCount != 24)
    {
        CloseHandle(hFile);
        return false;
    }

    SetFilePointer(hFile, bmFile.biBitCount, NULL, FILE_BEGIN); 

        // Calculate size of bitmap

    ulBitmapSize = ((bmInfo.bmiHeader.biWidth + 3) / 4) * 4;
    ulBitmapSize = (ulBitmapSize * (bmInfo.bmiHeader.biHeight * bmInfo.bmiHeader.biBitCount)) / 8;

    pBitmapData = new char[ulBitmapSize];   // Allocate memory


    if(!ReadFile(hFile, pBitmapData, ulBitmapSize, &ulBytesRead, NULL) || ulBytesRead != ulBitmapSize)
    {
        CloseHandle(hFile);
        delete pBitmapData;
        return false;
    }

    dcMainWindow    = GetDC(Game.hWndMain);
    *pDC            = CreateCompatibleDC(dcMainWindow);
    *phBitmap       = CreateCompatibleBitmap(dcMainWindow, bmInfo.bmiHeader.biWidth, bmInfo.bmiHeader.biHeight);

    SetDIBits(*pDC, *phBitmap, 0, bmInfo.bmiHeader.biHeight, pBitmapData, &bmInfo, DIB_RGB_COLORS);

    SelectObject(*pDC, *phBitmap);

    delete pBitmapData;
    CloseHandle(hFile);
    ReleaseDC(Game.hWndMain, dcMainWindow);

    return true;
} // Graphics_LoadBitmap()


ihr aufruf in einer anderen funktion (da sollten nacher noch welche reinkommen ^^):

C-/C++-Quelltext

1
2
3
4
5
bool Graphics_LoadBitmaps()
{
    Graphics_LoadBitmap(L"Bitmap.bmp", &dcPlayerDCs, &hPlayerBitmaps);
    return true;
} // Graphics_LoadBitmaps()



braucht ihr mehr?
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

$nooc

Alter Hase

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

22

20.09.2006, 15:47

ähm.. in der dokumentation von CreateFile steht dass man einfach GetLastError() aufrufen soll wenn die funktion fehlschlägt...

ich versteh nicht ganz, weil das bloße aufrufen mir nichts bringt ^^
weiß jem. wie ich die aufrufen muss damit ich eine fehlermeldung bekomme?


*EDIT:
HIER könnt ihr eine .rar datei saugen. da drinnen sind alle .cpp und .hpp dateien. vielleicht tut sich ja wer die mühe an ^^ ist eh nicht so ümeräßig viel ^^
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

Anonymous

unregistriert

23

20.09.2006, 15:53

Probier's mal mit void *hFile; ;) Und initialisieren möglichst bei der
Deklaration ist immer gut. ;)

EDIT: ROFL ich Idiot, HANDLE == void*

$nooc

Alter Hase

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

24

20.09.2006, 15:56

wenn ich hFile mit void *hFile deklariere kommt auch nichts raus

vllt sieht sich mal jemand die source dateien für mich durch ^^

*liebschau*
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

$nooc

Alter Hase

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

25

20.09.2006, 17:50

kann mir niemand weiterhelfen?
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

$nooc

Alter Hase

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

26

20.09.2006, 18:06

JAH es geht.. ich hab die bitmap datei in den falschen ordner gegeben (VC++ 2005 macht 2 ordner die debug heißen) und ich hab die bitmap in den ordner getan wo sich die .exe befindet. das war der falsche .. das muss man erst mal wissen

aber jetz hab ich ein andres problem..

C-/C++-Quelltext

1
2
3
4
5
6
    if(!ReadFile(hFile, pBitmapData, ulBitmapSize, &ulBytesRead, NULL) || ulBytesRead != ulBitmapSize)
    {
        CloseHandle(hFile);
        delete pBitmapData;
        return false;
    }


ulBytesRead = 40
ulBitmapSize = 108864

...
das kommt nicht gut.. ich weiß jetz nimmer warum ich das vergleichen muss/soll, aber wird schon stimmen ^^
aber .. verdammt wieso passt das jetz wieder nicht ?

nur noch ein paar zeilen bis zum return leute!! :) dann hab ich mein verdammtes bitmap (hoffentlich) *hehe*


*EDIT:

wenn ich schreibe:

C-/C++-Quelltext

1
2
3
4
5
6
    if(!ReadFile(hFile, pBitmapData, ulBitmapSize, &ulBytesRead, NULL))
    {
        CloseHandle(hFile);
        delete pBitmapData;
        return false;
    }


zeigt er das bitmap an,, aber in einem weißen quadrat, wo nur die hälfte des bildes zu sehn ist .. ^^
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

Anonymous

unregistriert

27

20.09.2006, 18:11

Bevor du Variablen verwendest, solltest du sie initialisieren. Hatte deinen
Code kurz angeguckt und da wird nichts vor der Verwendung initialisiert.
Also geh den Code durch, benutzt ::ZeroMemory für Pointer, initialisier
die Variablen und dann wirds laufen.

$nooc

Alter Hase

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

28

20.09.2006, 23:09

leute, ich hab den fehler .. anstatt BITMAPFILEHEADER hab ich BITMAPINFOHEADER verwendet ^^

danke für eure hilfe leute :)
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

Werbeanzeige