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
Quellcode |
|
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 82 83 84 85 86 87 88 89 |
result LoadBitmapToArray(const char *Bitmap) { UCHAR *Bild; //Speichert die BMP Bilddaten HANDLE Bitmap; //Handle auf die BMP Datei BITMAPFILEHEADER BMPFileHead; //BMP Datei Header BITMAPINFOHEADER BMPFileInfo; //BMP Datei Info Header DWORD LeseSpeicher; //Zwischenspeicher BYTE *RedData; //Rotanteil der Bitmap int ArrayWidth; //Breite des Rotanteilarrays int ArrayHieght; //Höhe des Rotanteilarrays //BMP Datei öffnen Bitmap = CreateFile(Bitmap, GENERIC_READ, FILE_SHARE_READ, (LPSECURITY_ATTRIBUTES) NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, (HANDLE) NULL); if(Bitmap == INVALID_HANDLE_VALUE) { MSGERR(D3DWindow, "Fehler beim öffnen der Bitmap"); return R_ERROR; } //BMP Header einlesen if(!ReadFile(Bitmap, &BMPFileHead, sizeof(BMPFileHead), &LeseSpeicher, NULL)) { MSGERR(D3DWindow, "Fehler beim lesen des Bitmap-Kopfs"); CloseHandle(Bitmap); return R_ERROR; } //BMP Info Header einlesen if(!ReadFile(Bitmap, &BMPFileInfo, sizeof(BMPFileInfo), &LeseSpeicher, NULL)) { MSGERR(D3DWindow, "Fehler beim lesen der Bitmap-Informationen"); CloseHandle(Bitmap); return R_ERROR; } //Hat das Bitmap das gewünschte Format? if(BMPFileInfo.biBitCount != 24) { MSGERR(D3DWindow, "Die Farbtiefe der Bitmap ist nicht 24-bit"); CloseHandle(Bitmap); return R_ERROR; } //Höhe und Breite des Bitmaps auslesen ArrayWidth = BMPFileInfo.biWidth; ArrayHeight = BMPFileInfo.biHeight; //Speicher dynamisch bereitstellen Bild = (UCHAR*)malloc(BMPFileInfo.biSizeImage); if(!Bild) { MSGERR(D3DWindow, "Der Speicher für die Bitmapdaten konnte nicht bereitgestellt werden"); CloseHandle(Bitmap); return R_ERROR; } //Liest die eigentlichen Bilddaten des BMP if(!ReadFile(Bitmap, Bild, BMPFileInfo.biSizeImage, &LeseSpeicher, NULL)) { MSGERR(D3DWindow, "Fehler beim lesen der Bitmap"); CloseHandle(Bitmap); return R_ERROR; } //Schliesse die Datei wieder CloseHandle(Bitmap); //Speicher für Bitmapdaten bereitstellen RedData = (BYTE*)malloc(BMPFileInfo.biSizeImage/3); //Rotanteil ins Array laden for(int y=0; y<ArrayHeight; y++) { for(int x=0; x<ArrayWidth; x++) { //Herausfiltern des Rotanteils UCHAR rot = Bild[((ArrayHeight-y)*ArrayWidth + x)*3 + 2]; RedData[x + (y*ArrayWidth)] = (BYTE)rot; } } //Speicher freigeben if(Bild) free(Bild); return R_OK; } |
Anonymous
unregistriert
Quellcode |
|
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 |
result LoadBitmapToArray(const char *Bitmap) { HBITMAP hBitmap; DIBSECTION DibSection; BYTE *RedData; int ArrayWidth; int ArrayHeight; hBitmap = (HBITMAP)LoadImage(0, Bitmap, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION); if(hBitmap==NULL) { MSGERR(D3DWindow, "Fehler beim laden der Bitmap"); return R_ERROR; } if(GetObject(hBitmap, sizeof(DIBSECTION), &DibSection)==0) { MSGERR(D3DWindow, "Fehler beim erzeugen des Bitmap-Objekts"); return R_ERROR; } if(DibSection.dsBm.bmBitsPixel!=24) { MSGERR(D3DWindow, "Die Farbtiefe der Bitmap ist nicht 24bit"); return R_ERROR; } //Höhe und Breite speichern ArrayWidth = DibSection.dsBm.bmWidth; ArrayHeight = DibSection.dsBm.bmHeight; //Speicher für Rotanteildaten bereitstellen RedData = (BYTE*)malloc(ArrayHeight*ArrayWidth*sizeof(BYTE)); for(int y=0; y<ArrayHeight; y++) { for(int x=0; x<ArrayWidth; x++) { RedData[(y*ArrayWidth)+x]=GetRValue(GetPixel((HDC)hBitmap, x, y)); } } return R_OK; } |
Werbeanzeige