Мне нужно графически отобразить грид (физические координаты ~300x300) на максимально больших, логических, позволяемых дисплеем координатах (600x600 и больших). Для предотвращения мерцания, в начале создается весь "Bitmap" в памяти (по физическому гриду), а затем, используя "BitBlt", графически отображается на максимально больших, логических координатах. Проблема в том, что такое расширение приводит к сильному падению в качестве изображения.
Код приложен.
Буду благодарен за любую помощь.
Герман.
void CRecDrawView::OnDraw(CDC* pDC)
{
CRect rect ;
int X, X1, Y, Y1, MatrixPart, DrawPart;
COLORREF color = RGB( 128, 128, 0 );
GetClientRect(rect );
int oldBkMode = pDC->SetBkMode(TRANSPARENT);
DrawPart = (rect.Width( ) < rect.Height( ) )
? rect.Width( ) : rect.Height( ) ;
if(DrawPart > MaxCoordinate) DrawPart = MaxCoordinate;
MatrixPart = MaxCoordinate/DrawPart ; // part of matrix, which must be displayed
X = 0 ;
X1 = X + DrawPart;
Y = 0 ;
Y1 = Y + DrawPart;
CDC memdc, * myDC;
pDC->SetMapMode(MM_ISOTROPIC);
SetWindowExtEx(*pDC,DrawPart,DrawPart,NULL);
SetViewportExtEx(*pDC,rect.right, -rect.bottom,NULL);
SetViewportOrgEx(*pDC,0,rect.bottom,NULL);
CBitmap bmp, *poldbmp;
memdc.CreateCompatibleDC( pDC);
bmp.CreateCompatibleBitmap (pDC, DrawPart, DrawPart);
poldbmp = memdc.SelectObject( &bmp );
memdc.BitBlt( 0,0,DrawPart, DrawPart,&memdc, 0, 0, WHITENESS );
myDC = &memdc;
...
}
16.10.03 10:48: Перенесено модератором из 'C/C++' — ПК
Здравствуйте, ls233, Вы писали:
///
При простом растяжении изображения без сглаживания (интерполяции) получится нечто некрасивое, со сглаживанием получится слегка размытая. Если качество не удовлетворяет, есть два способа:
1. Исходная картинка должна быть большего размера — с этим, как я понял, проблема.
2. Использовать фильтр повышения резкости. Если выводится одно и то же изображение, то этот вариант проходит (надо только грамотный фильтр подобрать

), тут главное, чтобы не пришлось фильтровать перед каждым выводом на экран, хотя есди комп быстрый.. но это все равно плохо.
Здравствуйте, Don Sergio, Вы писали:
DS>Здравствуйте, ls233, Вы писали:
DS>///
DS>При простом растяжении изображения без сглаживания (интерполяции) получится нечто некрасивое, со сглаживанием получится слегка размытая. Если качество не удовлетворяет, есть два способа:
DS>1. Исходная картинка должна быть большего размера — с этим, как я понял, проблема.
DS>2. Использовать фильтр повышения резкости. Если выводится одно и то же изображение, то этот вариант проходит (надо только грамотный фильтр подобрать
), тут главное, чтобы не пришлось фильтровать перед каждым выводом на экран, хотя есди комп быстрый.. но это все равно плохо.
1. Sovershenno verno.
2. Znacheniya soderjasheesya v konteinere postoyanno menyayutsya i kak raz vsya fishka v tom chto bi otobrazit' etot process.