Je veux charger un fichier image (.bmp) sur une application Win32, mais je ne souhaite pas utiliser le LOADBITMAP / LoadImage standard à partir de Windows API: Je souhaite que cela se charge à partir d'un tampon déjà en mémoire. Je peux facilement charger un bitmap directement à partir d'un fichier et l'imprimer à l'écran, mais ce problème me rendait coincé.
Ce que je recherche est une fonction qui fonctionne comme ceci: P>
HBITMAP LoadBitmapFromBuffer(char* buffer, int width, int height);
4 Réponses :
non, mais vous pouvez créer un nouveau bitmap de la taille de l'actuel en mémoire et écrivez votre structure de mémoire dessus. s> p>
Vous recherchez le CreateBitmap < / a> fonction. Définissez LPVBits sur vos données. P>
spéculer un bit: Careibsection code> peut être un peu compliqué à utiliser, mais l'une des choses qu'il peut faire est de créer un bitmap indépendant de l'appareil et de vous donner un pointeur au tampon pour les bits bitmap. Certes, vous avez déjà un tampon rempli de bits bitmap, mais au moins vous pouvez copier les données. p>
crédibsection code> peut également créer des bitmaps à partir d'objets de fichier, et il existe probablement un moyen d'obtenir Windows pour vous donner un objet de fichier représentant une pièce de mémoire, ce qui pourrait tromper
crédibsection code> en vous donnant un bitmap construit directement à partir de votre tampon. P>
Careibsection est l'API correcte à utiliser. La mémoire qu'il utilise doit être un type particulier de mémoire du noyau (car le pilote de périphérique graphique doit y accéder) - ce qui peut être satisfait d'une section de fichier (étant une structure de noyau elle-même) ou en laissant Carebsection allouer la mémoire.
Nevermind, j'ai trouvé ma solution! Voici le code d'initialisation:
std::ifstream is; is.open("Image.bmp", std::ios::binary); is.seekg (0, std::ios::end); length = is.tellg(); is.seekg (0, std::ios::beg); pBuffer = new char [length]; is.read (pBuffer,length); is.close(); tagBITMAPFILEHEADER bfh = *(tagBITMAPFILEHEADER*)pBuffer; tagBITMAPINFOHEADER bih = *(tagBITMAPINFOHEADER*)(pBuffer+sizeof(tagBITMAPFILEHEADER)); RGBQUAD rgb = *(RGBQUAD*)(pBuffer+sizeof(tagBITMAPFILEHEADER)+sizeof(tagBITMAPINFOHEADER)); BITMAPINFO bi; bi.bmiColors[0] = rgb; bi.bmiHeader = bih; char* pPixels = (pBuffer+bfh.bfOffBits); char* ppvBits; hBitmap = CreateDIBSection(NULL, &bi, DIB_RGB_COLORS, (void**) &ppvBits, NULL, 0); SetDIBits(NULL, hBitmap, 0, bih.biHeight, pPixels, &bi, DIB_RGB_COLORS); GetObject(hBitmap, sizeof(BITMAP), &cBitmap);
Bonjour, je suis développeur Java mais dans ma candidature, j'ai aussi besoin de charger l'image de C ++ et je ne sais pas comment le faire. Je recherche sur Internet depuis si longtemps mais je ne peux toujours pas l'obtenir. Alors, veuillez fournir votre code entier que je l'ai mal voulu. s'il te plaît