Форум программистов, компьютерный форум CyberForum.ru

Как улучшить качество Bitmap? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
ls233
0 / 0 / 0
Регистрация: 22.12.2009
Сообщений: 3
22.12.2009, 14:56     Как улучшить качество Bitmap? #1
Мне нужно графически отобразить грид (физические координаты ~300x300) на максимально больших, логических, позволяемых дисплеем координатах (600*600 и больших). Для предотвращения мерцания, в начале создается весь '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;
...
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.12.2009, 14:56     Как улучшить качество Bitmap?
Посмотрите здесь:

Помогите улучшить простой код C++
C++ Перезаписать память начиная с указателя Bitmap[1] элементами начиная с указателя Bitmap[0]
Как производится векторизация BITMAP? C++
как загрузить 24б. bitmap... C++
Как улучшить код?! C++
C++ Классы. Ввод данных о книге и их отображение (как улучшить код?)
C++ Перегрузка функций - улучшить код
C++ Улучшить сортировку или?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
boombastik
7 / 7 / 0
Регистрация: 13.02.2007
Сообщений: 1,255
23.12.2009, 13:29     Как улучшить качество Bitmap? #2
А в чем проблема? Вас не устраивает стандартный алгоритм транформации изображения? Он действительно имеет самую простую реализацию в Win API. Если хотите чего-нибудь более приемлимого, то можно воспользоваться одним из алгоритмов (билинеарный или бикубический) реализованным, например, вот в этой программе:

http://www.codeproject.com/bitmap/cximage.asp

Кроме того, для реализации double buffer для устранения мерцания вместо того чтобы писать это ручками как Вы это сделали, можно было воспользоваться удобным классом, который берет на себя всю рутину по созданию соразмерного изображения и BitBlt копированию после того как работа завершена:
http://www.codeproject.com/gdi/flickerfree.asp
http://www.codeproject.com/bitmap/bitmapdc.asp

Лично я использую CMemDC для этих целей, но вторая версия выглядит тоже неплохо.

С уважением, Владимир
ls233
0 / 0 / 0
Регистрация: 22.12.2009
Сообщений: 3
28.12.2009, 23:01  [ТС]     Как улучшить качество Bitmap? #3
Bol'shoe spasibo, ya poprobuyu....
Yandex
Объявления
28.12.2009, 23:01     Как улучшить качество Bitmap?
Ответ Создать тему
Опции темы

Текущее время: 15:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru