GDI+的问题
void CTestDlg::OnButton1()
{
CDC *pDC;
pDC = CDC::FromHandle(::GetDC(NULL));
int Width = GetSystemMetrics(SM_CXSCREEN);
int Height = GetSystemMetrics(SM_CYSCREEN);
CDC memDC;
memDC.CreateCompatibleDC(pDC);
CBitmap memBitMap,*oldMemBitMap;
memBitMap.CreateCompatibleBitmap(pDC, Width, Height);
oldMemBitMap = memDC.SelectObject(&memBitMap);
memDC.BitBlt(0,0,Width,Height,pDC,0,0,SRCCOPY);
DWORD dwCount = 1280*800*4;
BYTE *pBitMapBits = new BYTE[1280*800*4];
ZeroMemory(pBitMapBits,dwCount);
DWORD dwTemp = memBitMap.GetBitmapBits(dwCount,(LPVOID)pBitMapBits);
CMemFile mfBitMap(pBitMapBits,(UINT)dwCount,0);
CMemFile mfNewBitMap;
MBmpToMImage(mfBitMap,mfNewBitMap);
CBitmap bpNewBitMap;
}
BOOL CTestDlg:: MBmpToMImage(CMemFile& cbfBmp, CMemFile& cbfImage/*, CString strType*/)
{
int iBmpSize = cbfBmp.GetLength();
HGLOBAL hMemBmp = GlobalAlloc(GMEM_FIXED, iBmpSize);
if (hMemBmp == NULL) return FALSE;
IStream* pStmBmp = NULL;
CreateStreamOnHGlobal(hMemBmp, FALSE, &pStmBmp);
if (pStmBmp == NULL)
{
GlobalFree(hMemBmp);
return FALSE;
}
BYTE* pbyBmp = (BYTE *)GlobalLock(hMemBmp);
cbfBmp.SeekToBegin();
cbfBmp.Read(pbyBmp, iBmpSize);
Image imImage(pStmBmp,TRUE);
CLSID clImageClsid;
int i;
i = GetEncoderClsid(L"image/jpeg", &clImageClsid);
int j = imImage.Save(L"C:\\x.jpg",&clImageClsid);
if (1 != j)
{
MessageBox("错误2");
}
return TRUE;
}
最后save一直有错误,不知道怎么回事 ,望各位大侠解答!!!
ps:GetEncoderClsid函数没错
...全文
相关推荐
VC6下的GDI+双缓冲 解决闪烁问题
总的来说,GDI+双缓冲技术在解决Windows应用程序中的闪烁问题上发挥了重要作用。对于开发者来说,理解并熟练运用这一技术能够显著改善用户的交互体验,使得应用程序看起来更加流畅和专业。
GDI+的一些问题
DrawImage(m_pBmp,destRC,0,0,source_w,source_h,UnitPixel); 原图很大13M,我本意是用这个语句只将原图中位于视图中的部分画到m_pBmp中,但是经过多次试验发现: 当destRC.width 而一旦不符合这
GDI+中常见的几个问题
这是关于GDI+使用过程中常见的一些问题,应该能帮助你,例如很多时候你只能获得A generic error occur in GDI+但具体什么原因却不知道,这里面介绍了如何找到真正造成GDI+出错
贪吃英雄(四) GDI+双缓冲解决闪烁问题
下面,我们将详细解释这个问题,并给出具体的解决方案。**GDI+简介**GDI+是Windows编程中的一种图形设备接口,它提供了一组丰富的图形处理功能,包括绘图、图像处理、文本渲染等。
【AutoHotkey】基于 GDI + 复刻 Bulldozer 解决操作易出错无撤销问题!.zip
AutoHotkey结合GDI+技术的复刻版本,旨在解决原有Bulldozer软件中的易错性问题,并且加入了撤销功能,大幅提升了软件的易用性和用户的操作体验。


图形处理/算法
