GDI GDI+ 전환

2328 단어
물론 GDI+를 사용하여 GDI를 완전히 대체할 수 있기를 희망하며, 아무리 어려워도 GDI 대상에서 GDI+ 대상으로 전환하기만 하면 된다.그러나 신기술의 새로운 특성과 신속한 개발을 원하고 구판의 기존 기능을 버리려 하지 않는 공사가 그만큼 많다.어쩔 수 없어, 꿰매고 꿰매고 바느질만 해야 돼, 찰칵찰칵...1. CDC에서 Graphics까지:
Graphics g(pDC->GetSafeHdc());// CDC MFC 
	//CClientDC、CPaintDC, 
2. Cbitmap에서Graphics에 이르기까지 메모리 비트맵 장치를 만들어야 합니다.
CDC MemDC; 
CBitmap MemBitmap;
MemDC.CreateCompatibleDC(pDC);
MemBitmap.CreateCompatibleBitmap(pDC,size.cx, size.cy);
CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap);
Graphics g(MemDC.GetSafeHdc());
///… you can work with GDI+ … ///
또는 사용:
Bitmap::Bitmap(HBITMAP,HPALETTE)。
static?Bitmap?*FromHBITMAP(HBITMAP?hbm,HPALETTE?hpal);
셋째, 비트맵으로 그림을 열려면 GDI의 그림 함수로 조작해야 한다(일반적으로 역사에 문제가 남는다). 비트맵 대상을 CBitmap으로 전환해야 한다. 이렇게 할 수 있다.
Bitmap* pPicture = new Bitmap(L"dotLive.jpg");
HBITMAP hBitmap;
CBitmap* pbm;
pPicture->GetHBITMAP(Color(0,0,0),&hBitmap);
pbm = CBitmap::FromHandle(aaa1);
///… use pbm to do the GDI works ...///
pbm->DeleteObject();// GDI , …
넷째, 비트맵을 저장하면 열기 편하고 저장하기 불편하다.Bitmap 또는 Image에서 이미지를 열면 파일이 자동으로 잠기고 저장할 때 파일이 사용되는 것과 같은 오류가 발생합니다.저장할 때 새 Bitmap(Image) 객체를 새로 작성하여 원래 객체를 새 객체에 그린 다음 파일을 놓으려면 원래 객체를 삭제하는 절충적인 방법이 있습니다.새 객체를 저장합니다.clone을 사용할 수 없습니다. 잠긴 파일 자원을 함께 복사하면 잠금 해제에 필요한 방출 대상이 하나 더 많아집니다.
Bitmap* tPic= new Bitmap(L"dotLive.jpg");// 
Bitmap* pPicture = new Bitmap(tPic->GetWidth()
                             ,tPic->GetHeight()
                             ,tPic->GetPixelFormat());
Graphics g(pPicture);
g.DrawImage(tPic,0,0,m_nWidth,m_nHeight);// 
delete tPic;// 
/// … use the pPicture to access "dotLive.jpg" … ///
CLSID tiffClsid;
GetEncoderClsid(L"image/jpeg", &tiffClsid);// MSDN 
pPicture->Save(L"dotLive.jpg" ,&tiffClsid);// 
다섯째,Graphics에서 HDC까지 비트맵으로 그림을 쉽게 열려면 그림에 글을 써서 그림을 그려야 한다.엉망인 것은 역사가 남긴 문제 때문에, 이 조작들은 모두 GDI로 이루어진 것이다.또한 GDI+는 이질적이거나 드로잉 모드(고무줄 효과 구현), 텍스트 출력 음영 불투명 없음, 문자열을 WChar로 변환해야 합니다.어떡하지, 이렇게 돌릴 수 있어.
Bitmap* pPicture = new Bitmap(L"dotLive.jpg");// 
Graphics tempG(pPicture );
HDC hdc = tempG.GetHDC ();// GDI 
CDC* tempDC = CDC::FromHandle(hdc);
/// … hurry up, draw what you want … ///
tempG.ReleaseHDC(hdc); // relese,GDI , 

좋은 웹페이지 즐겨찾기