Народ, Помогите решить такую проблему.
При уменьшении изображения и последующем увеличении (или опять уменьшение идет, еще не понял) появляется эффект решетки (образец в прикрепленном файле) уменьшение
| Код | void CMyPicture::AddImagePrint(CImage *Img, int X_Begin, int Y_Begin, int Scale) { int Width = Img->GetWidth(); int Height = Img->GetHeight();
int ScaleWidth = MulDiv(Width*Scale/100, 150, 96); int ScaleHeight = MulDiv(Height*Scale/100, 150, 96);
int iX = MulDiv(X_Begin-m_MaskOffsetX, 150, 96); int iY = MulDiv(Y_Begin-m_MaskOffsetY, 150, 96);
Img->StretchBlt(m_PrintImage.GetDC(), iX, iY, ScaleWidth, ScaleHeight, 0, 0, Width, Height);
m_PrintImage.ReleaseDC(); }
|
увеличение
| Код | void CMyPicture::GetPrintType4 (CDC *pDC, int *pPos) { int iCntX, iCntY, iPos = 0; int iPosX; int iPosY;
int iX = m_PrintImage.GetWidth(); int iY = m_PrintImage.GetHeight();
int iRez_X = pDC -> GetDeviceCaps(LOGPIXELSX); int iRez_Y = pDC -> GetDeviceCaps(LOGPIXELSY);
int iSize_X = MulDiv (m_PrintImage.GetWidth(), iRez_X, 150); int iSize_Y = MulDiv (m_PrintImage.GetHeight(), iRez_Y, 150);
int iOffsetX = pDC -> GetDeviceCaps (PHYSICALOFFSETX); int iOffsetY = pDC -> GetDeviceCaps (PHYSICALOFFSETY);
iOffsetX = MulDiv (iOffsetX, 254, iRez_X); iOffsetY = MulDiv (iOffsetY, 254, iRez_Y);
HDC hDC = m_PrintImage.GetDC();
for (iCntY = 0; iCntY < 3; iCntY++) { for (iCntX = 0; iCntX < 2; iCntX++) { iPosX = MulDiv (100 - iOffsetX + 900*iCntX, iRez_X, 254); iPosY = MulDiv (100 - iOffsetY + 900*iCntY, iRez_Y, 254);
if (pPos[iPos++]) StretchBlt (pDC->m_hDC, iPosX, iPosY, iSize_X, iSize_Y, hDC, 0, 0, iX, iY, SRCCOPY); }
} m_PrintImage.ReleaseDC(); }
|
Если на первом шаге, уменьшения нет (т.е. передается scale=100) то решетки нет (минимальное уменьшение - 60% - на нем проявляется). Если все просто, не пинайте слишком - сами мы с линукса, к gdi не приученные :-)
|