19,469
社区成员
发帖
与我相关
我的任务
分享
int CMyFile::Draw(PVOID pdata1)
{
DATA* pd = (DATA*)pdata1;
CDC* dc = pd->pdc;
int data_h = pd->h;
int dc_h = pd->rby - pd->lty+1;
int dc_w = pd->rbx - pd->ltx+1;
int colorwidth = 4*((dc_w*8+31)/32);
short* p = pd->pdata;
LPBITMAPINFO bi;
bi = (BITMAPINFO*)new BYTE[sizeof(BITMAPINFOHEADER)+256*sizeof(RGBQUAD)];//申请空间
bi->bmiHeader.biBitCount = 8;
bi->bmiHeader.biClrImportant = 0;
bi->bmiHeader.biCompression = BI_RGB;
bi->bmiHeader.biHeight = dc_h;
bi->bmiHeader.biPlanes = 1;
bi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bi->bmiHeader.biSizeImage = 0;
bi->bmiHeader.biWidth = dc_w;
bi->bmiHeader.biXPelsPerMeter = 0;
bi->bmiHeader.biYPelsPerMeter = 0;
for (int ii = 0; ii < 256;ii++)
{
bi->bmiColors[ii].rgbBlue = ii;
bi->bmiColors[ii].rgbGreen= ii;
bi->bmiColors[ii].rgbRed = ii;
bi->bmiColors[ii].rgbReserved = 0;
}
BYTE* lpBits;
CDC* memdc=new CDC();
memdc->CreateCompatibleDC(dc);
HBITMAP hBitmap=::CreateDIBSection(memdc->m_hDC,bi,DIB_RGB_COLORS,(void**)&lpBits,NULL,0);
if (!hBitmap)
{
AfxMessageBox(TEXT("111"));
}
ASSERT(hBitmap!=NULL);
int j =0;
float ratio = (float)pd->h/(float)dc_h;
for(int i = 0; i < colorwidth;++i)
{
for (j = 0;j < dc_h;++j)
{
//lpBits[i*dc_h+j] = ((p[(int)( pd->h * i +j*ratio)]+32768)>>8);
}
}
HBITMAP oldbitmap = (HBITMAP)memdc->SelectObject(hBitmap);
dc->BitBlt(pd->ltx,pd->lty,dc_w,dc_h,memdc,0,0,SRCCOPY);
memdc->SelectObject(oldbitmap);
delete bi;
DeleteObject(hBitmap);
memdc->DeleteDC();
delete memdc;
return 1;
}