קריאת קובץ BITMAP
אני מנסה לקרוא קובץ BITMAP, ולמלא איזה מערך בצבעים של התמונה, אבל משום מה כשאני מנסה לצייר את זה אני מקבל משהו מעוות של התמונה בgrayscale... הנה הקוד:
Surface זה בעיקרון רק מחלקה עם מערך של wordים, ואורך וגובה התמונה... הפונקציה rgb מקבלת שלושה בייטים ומחזירה word, בקיצור הופכת צבע של 24bit לצבע של 16bit. הקוד של rgb:
אני מנסה לקרוא קובץ BITMAP, ולמלא איזה מערך בצבעים של התמונה, אבל משום מה כשאני מנסה לצייר את זה אני מקבל משהו מעוות של התמונה בgrayscale... הנה הקוד:
Surface *pRetSurface; BITMAPFILEHEADER bmfh; BITMAPINFOHEADER bmih; RGBQUAD *pBits; FILE *pFile=fopen(FileName,"r"); if (!pFile) return NULL; fread(&bmfh,sizeof(bmfh),1,pFile); fread(&bmih,sizeof(bmih),1,pFile); fseek(pFile,bmfh.bfOffBits,SEEK_CUR); pBits=new RGBQUAD[bmih.biWidth*bmih.biHeight]; fread(pBits,sizeof(RGBQUAD),bmih.biWidth*bmih.biHeight,pFile); pRetSurface=new Surface(bmih.biWidth,bmih.biHeight); for (long i=0;i<bmih.biWidth*bmih.biHeight;i++) { BYTE R,G,B; R=pBits.rgbRed; G=pBits.rgbGreen; B=pBits.rgbBlue; pRetSurface->m_pBuffer=rgb(R,G,B); }
Surface זה בעיקרון רק מחלקה עם מערך של wordים, ואורך וגובה התמונה... הפונקציה rgb מקבלת שלושה בייטים ומחזירה word, בקיצור הופכת צבע של 24bit לצבע של 16bit. הקוד של rgb:
WORD rgb(BYTE r,BYTE g,BYTE b) { return (WORD) (r & 0xff) << 11 | (g & 0xff) << 6 | (b & 0xff); }
בתודה מראש.