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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
ls233
0 / 0 / 0
Регистрация: 22.12.2009
Сообщений: 3
#1

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

22.12.2009, 14:56. Просмотров 1114. Ответов 2
Метки нет (Все метки)

Мне нужно графически отобразить грид (физические координаты ~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;
...
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.12.2009, 14:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как улучшить качество Bitmap? (C++):

Как улучшить код?! - C++
Написал код к заданию: Дан целочисленный массив размера N. Если он является перестановкой, то есть содержит все числа от 1 до N, то вывести...

Последовательности чисел: как улучшить / ускорить алгоритм? - C++
Задание: Для заданной последовательности неотрицательных целых чисел необходимо найти максимальное произведение двух её элементов,...

Как улучшить свой код и его структуру? - C++
Изучил основы С++, сейчас активно изучаю SFML, Qt и глядя на код других людей я замечаю что мой код заведомо отличается, (хотя по сути то...

Число делим K предметов на N человек. задача на остаток. Как улучшить? - C++
Число делим K предметов на N человек, остаток в &quot;корзину&quot;. Определить сколько приходится предметов на 1 ч. Имеется следующее решение ...

Классы. Ввод данных о книге и их отображение (как улучшить код?) - C++
Изучаю классы. Сделал программку для класса card имеющего 2 метода - для введения данных о книге и их отображения. Подскажите как можно...

Плохой калькулятор: как его сделать нормальным? (улучшить код) - C++
Как его сделать нормальным ? :cry: #include &lt;functional&gt; #include &lt;iostream&gt; #include &lt;sstream&gt; #include &lt;string&gt; #include...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
boombastik
7 / 7 / 0
Регистрация: 13.02.2007
Сообщений: 1,255
23.12.2009, 13:29 #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 для этих целей, но вторая версия выглядит тоже неплохо.

С уважением, Владимир
0
ls233
0 / 0 / 0
Регистрация: 22.12.2009
Сообщений: 3
28.12.2009, 23:01  [ТС] #3
Bol'shoe spasibo, ya poprobuyu....
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.12.2009, 23:01
Привет! Вот еще темы с ответами:

Как загрузить 24-битный bitmap? - C++
импортирую bitmap он преобразуется в 256... и еще : как оазложить COLORREF на состовляющие...

Как производится векторизация BITMAP? - C++
Народ поможите! Как производится векторизация BITMAP и тому подобное.

Как улучшить следующий код программы? Поиск всех простых чисел до 1000 - C++
#include &lt;iostream&gt; #include &lt;cstring&gt; int main() { std::size_t size = 1000; bool *simpleArray = new bool (); ...

Как прочесть из exe ресурс - bitmap - C++
Что сделано и что пока не получается. 1. В файле ресурсов вот такая строчка, ей и соответствующими компиляциями - добавляю в создаваемый...


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru