MFC 이미지 띄우고나서 현재 픽처컨트롤 띄운 이미지 저장한 뒤 다시 자동으로 원래 이미지 띄울때 오류가 생깁니다

GyeongIn Bae@Google의 이미지

Debug Assertion Failed!

Program: D:\mfcEx\MPCReport\MFCApplication1\Debug\MFCPictureTest.exe
File: d:\program files\microsoft visual studio 12.0\vc\atlmfc\include\atlimage.h
Line: 1607

Expression: hBitmap == m_hBitmap

라는 오류가 뜨면서 프로그램디버깅이 멈춰버립니다

코드중간에
cImage.StretchBlt(pDC->m_hDC, x1, y1, x2, y2, 0, 0, cImage.GetWidth(), cImage.GetHeight(), SRCCOPY);
에서 오류가 일어났고 저장 자체는 재대로 되고 좌표값에는 오류가 없는걸 확인했습니다 아마 pDC->m_hDC 에서 오류가 일어나는것 같네요
그냥 파일 열기만 계속하면 이상이없으나 파일을 저장한뒤에 저 코드가 실행되면 오류가 발생합니다
구글 뒤져보다가 답답해서 올립니다 ㅠㅠ 참고 코드 올려드립니다

 
void CMFCApplication1Dlg::pictureLoad(){
	if (oldCheckImageOp!=90)
		cImage.Destroy();
	HRESULT hr = cImage.Load(filePath);
 
	if (FAILED(hr)) //이미지 로드 안되었을때
	{
		return;
	}
	checkImageOp = 19;
}
 
void CMFCApplication1Dlg::remakePic(){
	oldCheckImageOp = checkImageOp;
	if (checkImageOp == 19){
		x1 = 0; y1 = 0; x2 = rcx; y2 = rcy;
		ox1 = 0; oy1 = 0; ox2 = cImage.GetWidth(); oy2 = cImage.GetHeight();
	}
	if (checkImageOp == 2){
		if (y2 != -rcy){
			y1 += rcy; y2 -= rcy * 2;
			oy1 += cImage.GetHeight(); oy2 -= cImage.GetHeight() * 2;
		}
		else{
			y1 -= rcy; y2 += rcy * 2;
			oy1 -= cImage.GetHeight(); oy2 += cImage.GetHeight() * 2;
		}
	}
	if (checkImageOp == 3){
		if (x2 != -rcx){
			x1 += rcx - 1; x2 -= rcx * 2;
			ox1 += cImage.GetWidth(); -1; ox2 -= cImage.GetWidth() *2;
		}
		else{
			x1 -= rcx+1; x2 += rcx * 2;
			ox1 -= cImage.GetWidth(); +1; ox2 += cImage.GetWidth() * 2;
		}
	}
	if (checkImageOp == 4){
 
	}
	if (checkImageOp == 5){
 
	}
	checkImageOp = 99;
}
 
void CMFCApplication1Dlg::openPicture(){
 
	if (checkImageOp == 0)
		return;
	if (checkImageOp == 1){
 
		pictureLoad();
	}
	CDC * pDC;
	CRect cRect;
	pDC = m_Picture.GetDC(); 
 
	m_Picture.GetClientRect(cRect);
 
	CBrush cbWhite(RGB(255, 255, 255));
	pDC->FillRect(cRect, &cbWhite); 
 
 
	pDC->SetStretchBltMode(COLORONCOLOR);
	if (checkImageOp != 99){
		remakePic();
	}
 
	//test
	cImage.StretchBlt(pDC->m_hDC, x1, y1, x2, y2, 0, 0, cImage.GetWidth(), cImage.GetHeight(), SRCCOPY);//에러
 
 
	ReleaseDC(pDC);	
 
}
 
void CMFCApplication1Dlg::savePicture(){
 
	testcImage.Create(cImage.GetWidth(), cImage.GetHeight(), 32);
	/*pDC->DeleteDC();*/
	cImage.Destroy();
 
	HRESULT hr = makeNewImage.Load(filePath);
 
	if (FAILED(hr)) //이미지 로드 안되었을때
	{
		return;
	}
 
	HDC hProcessDC = makeNewImage.GetDC();
	HDC hDC = testcImage.GetDC();
 
	SetStretchBltMode(hDC, COLORONCOLOR);
	makeNewImage.StretchBlt(hDC, ox1, oy1, ox2, oy2, 0, 0, testcImage.GetWidth(), testcImage.GetHeight(), SRCCOPY);
 
 
	testcImage.ReleaseDC();
	testcImage.Save(savefilePath);
	makeNewImage.ReleaseDC();
	testcImage.Destroy(); makeNewImage.Destroy();
 
	//ReleaseDC(pDC);
 
	DeleteDC(hProcessDC);
	DeleteDC(hDC);
 
 
	checkImageOp = 1;
	oldCheckImageOp = 90;
	PictureopenDlg();
	openPicture(); //에러
 
 
}

GyeongIn Bae@Google의 이미지

쓸대없이 Destroy,DeleteDC 한거랑 Destroy 위치 등등 다시 지우고 고치니까 되네요 이거하느라 오늘 반나절 보냈네요 ㅠㅠ