关于双缓存防闪烁的问题我用StretchDIBits在OnDraw函数里输出的图像
图像输出没有问题,但是由于图像太大,在拉滚动条时,图像显示的很慢,实时性不太好。高手能不能根据我的程序的实际情况
提供一些帮助,最好是修改我的代码,或提供相应的代码!像素数据放在BYTE wDataBuffer[1024*2048];里
void CMyViewView::DrawBMP(CDC *pDC)
{
ReadText();
//8位位图调色板个数为256,每个RGBQUAD有4个元素,所以调色板所占内存空间为256×4
unsigned full_size = sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD)* 256;
//为BITMAPINFO结构分配内存
BITMAPINFO *bmp = (BITMAPINFO *) new unsigned char[full_size];
bmp-> bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmp-> bmiHeader.biWidth = 2048;
bmp-> bmiHeader.biHeight = 1024;
bmp-> bmiHeader.biPlanes = 1;
bmp-> bmiHeader.biBitCount = 8; //8位位图
bmp-> bmiHeader.biCompression = 0;
bmp-> bmiHeader.biSizeImage = 0;
bmp-> bmiHeader.biXPelsPerMeter = 0;
bmp-> bmiHeader.biYPelsPerMeter = 0;
bmp-> bmiHeader.biClrUsed = 0;
bmp-> bmiHeader.biClrImportant = 0;
//建立256级灰度调色板
for(int i=0;i<256;i++)
{
bmp-> bmiColors[i].rgbBlue = i;
bmp-> bmiColors[i].rgbGreen= i;
bmp-> bmiColors[i].rgbRed = i;
bmp-> bmiColors[i].rgbReserved=0;
}
//用RGB色与自定义调色板配对
// HBITMAP h_bitmap = ::CreateDIBSection(pDC-> m_hDC,bmp,DIB_RGB_COLORS,(LPVOID*)&wDataBuffer,NULL,0);
::StretchDIBits(pDC->m_hDC,0,0,2048,1024,0,0,2048,1024, wDataBuffer,(LPBITMAPINFO)bmp,DIB_RGB_COLORS,SRCCOPY);
delete []bmp;
}
void CMyViewView::OnDraw(CDC* pDC)
{
CMyViewDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
ReadText();
DrawBMP(pDC);
// delete wDataBuffer;
}
void CMyViewView::OnInitialUpdate()
{
CScrollView::OnInitialUpdate();
CSize sizeTotal;
// TODO: calculate the total size of this view
// ReadText();
sizeTotal.cx =2048;
sizeTotal.cy =1024;
SetScrollSizes(MM_TEXT, sizeTotal);
// SetScaleToFitSize(sizeTotal);
// delete wDataBuffer;
}