Mã:
void CDemoBitmapView::OnDraw(CDC* pDC){ CDemoBitmapDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here HDC hdc=pDC->Detach(); int FHandle; BITMAPFILEHEADER bmpfh; HANDLE hBmp, hBuff; BITMAPINFO *BmpInfo; unsigned char *Buff; int Count,NumColor; long n, BytesPerLine; unsigned long width,height,numByte; char *hexName="SaveFile.hex"; FILE *fr; //Lay kich thuoc, chieu rong va chieu cao cua anh Bitmap if ((fr=fopen(hexName,"rb"))==NULL) exit(1); fread(&width,4,1,fr); fread(&height,4,1,fr); numByte=0; unsigned char temp; while (!feof(fr)) { fread(&temp,1,1,fr); numByte++; } fclose(fr); Count=0; SetCursor(LoadCursor(NULL, IDC_WAIT)); // Mo file bitmap de doc if ((FHandle=open(hexName, O_BINARY|O_RDONLY))==-1) exit(1); //Doc thong tin cho phan Header bmpfh.bfType=19778; bmpfh.bfSize=54+numByte; bmpfh.bfReserved1=0; bmpfh.bfReserved2=0; bmpfh.bfOffBits=54; // Ðoc header file bitmap hBmp=GlobalAlloc(LMEM_MOVEABLE, bmpfh.bfOffBits-sizeof(BITMAPFILEHEADER)); BmpInfo=(BITMAPINFO*)GlobalLock(hBmp); //doc thong tin cho phan Header Info BmpInfo->bmiHeader.biSize=40; BmpInfo->bmiHeader.biWidth=width; BmpInfo->bmiHeader.biHeight=height; BmpInfo->bmiHeader.biPlanes=1; BmpInfo->bmiHeader.biBitCount=1; BmpInfo->bmiHeader.biCompression=BI_RGB; BmpInfo->bmiHeader.biSizeImage=numByte; BmpInfo->bmiHeader.biXPelsPerMeter=0; BmpInfo->bmiHeader.biYPelsPerMeter=0; BmpInfo->bmiHeader.biClrUsed=0; BmpInfo->bmiHeader.biClrImportant=0; BmpInfo->bmiColors[0].rgbBlue=255; BmpInfo->bmiColors[0].rgbGreen=255; BmpInfo->bmiColors[0].rgbRed=255; BmpInfo->bmiColors[1].rgbBlue=0; BmpInfo->bmiColors[1].rgbGreen=0; BmpInfo->bmiColors[1].rgbRed=0; // Ðoc phan bitmap info và palette màu if (BmpInfo->bmiHeader.biCompression != BI_RGB) exit(1); // Xác dinh so màu cua palette NumColor=(int)pow(2,BmpInfo->bmiHeader.biBitCount); if(NumColor>256) exit(1); // Xác dinh so byte cho 1 scanline BytesPerLine=(bmpfh.bfSize-bmpfh.bfOffBits)/BmpInfo->bmiHeader.biHeight; /* Cap nhat thông tin kích thuoc anh trên BITMAPINFO (hien tai = 0 neu anh không nén) */ BmpInfo->bmiHeader.biSizeImage=bmpfh.bfSize-bmpfh.bfOffBits; // Ðoc noi dung file bitmap hBuff=GlobalAlloc(GMEM_MOVEABLE, BmpInfo->bmiHeader.biSizeImage); Buff=(unsigned char *)GlobalLock(hBuff); if (!Buff) exit(1); //Doc bo 8 byte dau cua hexName.hex unsigned long stemp; read(FHandle,&stemp,4); read(FHandle,&stemp,4); // Ðoc tung dòng trên file do { n=read(FHandle,Buff,BytesPerLine); Buff+=n; Count++; }while (Count<BmpInfo->bmiHeader.biHeight); close(FHandle); GlobalUnlock(hBuff); GlobalUnlock(hBmp); SetCursor(LoadCursor(NULL, IDC_ARROW));/*-----------------Tao palette màu cho anh Bitmap---------------------*/ HANDLE hMemPal; LOGPALETTE far *logPal; HPALETTE hPal; int i; hMemPal=GlobalAlloc(LMEM_MOVEABLE, sizeof(LOGPALETTE)+NumColor*sizeof(PALETTEENTRY)); logPal=(LOGPALETTE far *)GlobalLock(hMemPal); // So muc trong Palette logPal->palNumEntries=NumColor; logPal->palVersion=0x300; //Gán các giá tri màu RGB cho nhung Entry trong Palette for (i=0;i<NumColor;i++) //Error here { logPal->palPalEntry[i].peRed=BmpInfo->bmiColors[i].rgbRed; logPal->palPalEntry[i].peGreen=BmpInfo->bmiColors[i].rgbGreen; logPal->palPalEntry[i].peBlue =BmpInfo->bmiColors[i].rgbBlue; logPal->palPalEntry[i].peFlags = PC_RESERVED; } // Tao handle cho Palette hPal=CreatePalette(logPal); GlobalUnlock(hMemPal); GlobalFree(hMemPal); if (!hPal) exit(1);/*------------------------Tao handle bmp file ------------------------------*/ SetCursor(LoadCursor(NULL, IDC_WAIT)); // Nap palette vào hdc SelectPalette(hdc,hPal,FALSE); RealizePalette(hdc); BmpInfo=(BITMAPINFO *)LocalLock(hBmp); Buff=(unsigned char *)GlobalLock(hBuff); //Tao bitmap hBmp=CreateDIBitmap(hdc,(BITMAPINFOHEADER *)BmpInfo, CBM_INIT, Buff, (BITMAPINFO *)BmpInfo,DIB_RGB_COLORS); GlobalUnlock(hBuff); GlobalUnlock(hBmp); GlobalFree(hBuff); GlobalFree(hBmp); SetCursor(LoadCursor(NULL, IDC_ARROW)); if(!hBmp) exit(1);/*-----------------------Hien thi bitmap lên cua so---------------------------*/ HDC hMemDC; HANDLE OldBmp; // Tao MDC hMemDC=CreateCompatibleDC(hdc); SelectPalette(hMemDC, hPal, FALSE); // Tro ve palette he thong UnrealizeObject(hPal); // Nap lai palette RealizePalette(hdc); SelectPalette(hMemDC, hPal, FALSE); // Liên ket hMemDC voi anh bitmap OldBmp=SelectObject(hMemDC, hBmp); // Copy bitmap lên window BitBlt(hdc,1, 1, width, height, hMemDC, 0, 0,SRCCOPY); // Huy MDC SelectObject(hMemDC,OldBmp); DeleteDC(hMemDC);}
Các bác xem giúp tôi lỗi đó là lỗi gì được không ạ!
Thanh lý pallet nhựa cũ Đaklak Trải dài trên vùng đất Daklak, những chiếc pallet nhựa cũ Đaklak nằm rải rác như những bức tranh tĩnh lặng, kể lể về những chặng đường mà chúng đã đi qua. Những đường...
Thanh lý pallet nhựa cũ Đaklak