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
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 |
void LoadBitmap24Bit (::HWND__* hwnd, const char Dateiname[50], 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 file_handle = ::CreateFile (Dateiname, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL); // Bitmap-Header lesen if(!::ReadFile (file_handle, &bitmap_header, sizeof(bitmap_header), &file_recievedbytes,NULL) || file_recievedbytes != sizeof(bitmap_header)) { ::CloseHandle (file_handle); } // 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); } // 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; } // Primärpuffer holen device_context = ::GetDC (hwnd); // Kompatiblen Device Context des Primärpuffers erstellen (*device_context_) = ::CreateCompatibleDC (device_context); // Kompatible Bitmap des Primärpuffers erstellen (*bitmap_) = ::CreateCompatibleBitmap (device_context, bitmap_info.bmiHeader.biWidth, bitmap_info.bmiHeader.biHeight); // Bitmap mit den Farbdaten füllen ::SetDIBits ((*device_context_), (*bitmap_), 0, bitmap_info.bmiHeader.biHeight, bitmap_data, &bitmap_info, DIB_RGB_COLORS) ; // 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); }; |
Zitat von »"Top_se"«
das mit Dateiname[50] ist sicher schlecht gelöst, aber ich [edit on]will[edit off] ja auch erstmal nur testen ...
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 char *Dateiname, 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 = ::CreateFile ("Wuerfel0.png", GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL)) == INVALID_HANDLE_VALUE) MessageBox(hwnd,"1","Error",NULL); // Bitmap-Header lesen if (!::ReadFile (file_handle, &bitmap_header, sizeof(bitmap_header), &file_recievedbytes,NULL) || file_recievedbytes != sizeof(bitmap_header)) { ::CloseHandle (file_handle); MessageBox(hwnd,"2","Error",NULL); } // 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); MessageBox(hwnd,"3","Error",NULL); } // 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; MessageBox(hwnd,"4","Error",NULL); } // Primärpuffer holen if ((device_context = ::GetDC (hwnd)) == NULL) MessageBox(hwnd,"5","Error",NULL); // Kompatiblen Device Context des Primärpuffers erstellen if (((*device_context_) = ::CreateCompatibleDC (device_context)) == NULL) MessageBox(hwnd,"6","Error",NULL); // Kompatible Bitmap des Primärpuffers erstellen if (((*bitmap_) = ::CreateCompatibleBitmap (device_context, bitmap_info.bmiHeader.biWidth, bitmap_info.bmiHeader.biHeight)) == NULL) MessageBox(hwnd,"7","Error",NULL); // Bitmap mit den Farbdaten füllen if (!::SetDIBits ((*device_context_), (*bitmap_), 0, bitmap_info.bmiHeader.biHeight, bitmap_data, &bitmap_info, DIB_RGB_COLORS)) MessageBox(hwnd,"8","Error",NULL); // 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); } |
Anonymous
unregistriert
Anonymous
unregistriert
Werbeanzeige