Re: Programmazione & Co....
mi serve una mano....devo leggere una bitmap in formato esadecimale qualcuno mi puo aiutare?
mi serve una mano....devo leggere una bitmap in formato esadecimale qualcuno mi puo aiutare?
CString WINAPI ReadDIBFileHex(CFile& file) { BITMAPFILEHEADER bmfHeader; DWORD dwBitsSize; HDIB hDIB; LPSTR pDIB; CString BitMapHex = ""; /* * get length of DIB in bytes for use when reading */ dwBitsSize = file.GetLength(); /* * Go read the DIB file header and check if it's valid. */ if (file.Read((LPSTR)&bmfHeader, sizeof(bmfHeader)) != sizeof(bmfHeader)) return ""; if (bmfHeader.bfType != DIB_HEADER_MARKER) return ""; /* * Allocate memory for DIB */ hDIB = (HDIB) ::GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT, dwBitsSize); if (hDIB == 0) { return ""; } pDIB = (LPSTR) ::GlobalLock((HGLOBAL) hDIB); /* * Go read the bits. */ if (file.ReadHuge(pDIB, dwBitsSize - sizeof(BITMAPFILEHEADER)) != dwBitsSize - sizeof(BITMAPFILEHEADER) )//sizeof(BITMAPFILEHEADER) = 14 { ::GlobalUnlock((HGLOBAL) hDIB); ::GlobalFree((HGLOBAL) hDIB); return ""; } int Larghezza = (int) ::DIBWidth(pDIB); int Altezza = (int) ::DIBHeight(pDIB); //prendo la potenza di due che puo contenere la riga della bitmap double Valore = 0; double Esponente = 0; while(true) { Valore = pow(2,Esponente); if((int)Valore >= Larghezza) break; Esponente++; } //Intestazione comando BitMapHex.Format("~DGE:%s,%0.5d,%0.3d,","SAMPLE",Altezza * ((int)Valore/8),(int)Valore/8); //conversione e formattazione bitmap in esadecimale for(int i = Altezza; i > 0; i --)//leggo le righe dall'ultima alla prima { for(int j = 0; j < Valore/8; j++)//ciclo sui byte di ogni riga (1 byte ha 8 pixel) { unsigned char c = pDIB[j + (bmfHeader.bfOffBits - sizeof(bmfHeader)) + (i * ((int)Valore/8))]; c = ~c;//inverto il valore dei bit nel byte, la zebra vuole i valori invertiti ( 0 = bianco e F = nero) int val = c; CString ByteBitMapHex; ByteBitMapHex.Format("%0.2x",val);//converto il valore in esadecimale BitMapHex += ByteBitMapHex; } } ::GlobalUnlock((HGLOBAL) hDIB); return BitMapHex; }
Commenta