<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=418719&amp;view=findpost&amp;p=3831361</guid>
        <pubDate>Mon, 25 May 2020 02:59:29 +0000</pubDate>
        <title>Direct2D, рисование в память и его вывод</title>
        <link>https://forum.sources.ru/index.php?showtopic=418719&amp;view=findpost&amp;p=3831361</link>
        <description><![CDATA[Black_Dragon: Еще одни тесты провел: по таймеру рисовал разные изображения:<br>
Удаление m_pBRender и повторное его создание перед каждым выводом:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">m_pBRender = new CBitmapRenderTarget();</div><div class="code_line">GetRenderTarget()-&#62;CreateCompatibleRenderTarget(*m_pBRender, CD2DSizeF(sizeTotal.cx, sizeTotal.cy));</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
Не очищает изображение, а повторно там рисуется и при выводе многократно накладывается. Выход: заливка фоном перед началом рисования.<br>
<br>
Но теперь имею такую проблему: хотел подобным образом подготовить разные картинки в памяти с надписями, чтоб выводит их в нужным местах в конечном рендере. А по факту получается, что это все одна и та же область рисования?]]></description>
        <author>Black_Dragon</author>
        <category>Программирование графики</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=418719&amp;view=findpost&amp;p=3831230</guid>
        <pubDate>Thu, 21 May 2020 13:36:17 +0000</pubDate>
        <title>Direct2D, рисование в память и его вывод</title>
        <link>https://forum.sources.ru/index.php?showtopic=418719&amp;view=findpost&amp;p=3831230</link>
        <description><![CDATA[Black_Dragon: Хм... провел тесты.<br>Вывод текста на прямую в OnDraw2D всегда с розовой окантовкой при любом фоне...  :-? <br>Хотя там, лично мне, уже выводить не нужно, но ситуация не понятна.]]></description>
        <author>Black_Dragon</author>
        <category>Программирование графики</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=418719&amp;view=findpost&amp;p=3831214</guid>
        <pubDate>Thu, 21 May 2020 05:53:35 +0000</pubDate>
        <title>Direct2D, рисование в память и его вывод</title>
        <link>https://forum.sources.ru/index.php?showtopic=418719&amp;view=findpost&amp;p=3831214</link>
        <description><![CDATA[Black_Dragon: Вообщем сделал так.<br>
<div class="tag-spoiler spoiler closed"><div class="spoiler_header" onclick="openCloseParent(this)">OnUpdate</div><div class="body"><div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">m_pBRender = new CBitmapRenderTarget();</div><div class="code_line">GetRenderTarget()-&#62;CreateCompatibleRenderTarget(*m_pBRender, CD2DSizeF(sizeTotal.cx, sizeTotal.cy));</div><div class="code_line">CRect rect(0, 0, sizeTotal.cx, sizeTotal.cy);</div><div class="code_line">m_pLinearGradientBrush-&#62;SetEndPoint(CPoint(sizeTotal.cx, sizeTotal.cy));</div><div class="code_line">D2D1_ROUNDED_RECT r = D2D1::RoundedRect(D2D1::RectF(10.f, 10.f, 100.f, 50.f), 10.f, 10.f);</div><div class="code_line">m_pBRender-&#62;BeginDraw();</div><div class="code_line">&nbsp;</div><div class="code_line">m_pBRender-&#62;FillRectangle(rect, m_pLinearGradientBrush);</div><div class="code_line">m_pBRender-&#62;DrawRoundedRectangle(r, m_pBrushLine, 5.0f);</div><div class="code_line">m_pBRender-&#62;FillRoundedRectangle(r, m_pBrushBG);</div><div class="code_line">m_pBRender-&#62;DrawText(_T(&quot;Hello, World!&quot;), CRect(10, 100, 100, 150), m_pBlackBrush, m_pTextFormat);</div><div class="code_line">CD2DPointF pStart, pEnd;</div><div class="code_line">pStart.x = sizeTotal.cx / 2;</div><div class="code_line">pStart.y = sizeTotal.cy / 2;</div><div class="code_line">int count = 20;</div><div class="code_line">FLOAT len = min(sizeTotal.cx, sizeTotal.cy) / 3;</div><div class="code_line">CD2DSizeF ell_r(5.0f, 5.0f);</div><div class="code_line">for (int i = 0; i &#60; count; ++i)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;FLOAT angle = 2 * M_PI * ((FLOAT) i) / ((FLOAT) count);</div><div class="code_line">&nbsp;&nbsp; &nbsp;pEnd.x = pStart.x + len * cosf(angle);</div><div class="code_line">&nbsp;&nbsp; &nbsp;pEnd.y = pStart.y + len * sinf(angle);</div><div class="code_line">&nbsp;&nbsp; &nbsp;m_pBRender-&#62;DrawLine(pStart, pEnd, m_pBrushLine, 1.0f);</div><div class="code_line">&nbsp;&nbsp; &nbsp;CD2DEllipse ell(pEnd, ell_r);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;m_pBRender-&#62;DrawEllipse(ell, m_pBrushLine, 4.0f);</div><div class="code_line">&nbsp;&nbsp; &nbsp;m_pBRender-&#62;FillEllipse(ell, m_pBrushBG);</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">m_pBRender-&#62;Flush();</div><div class="code_line">m_pBRender-&#62;EndDraw();</div><div class="code_line">&nbsp;</div><div class="code_line">SetScrollSizes(MM_TEXT, sizeTotal);</div><div class="code_line">CScrollView::OnUpdate(pSender, lHint, pHint);</div></ol></div></div></div></div></div></div><br>
<br>
<div class="tag-spoiler spoiler closed"><div class="spoiler_header" onclick="openCloseParent(this)">OnDraw2D</div><div class="body"><div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">CPoint point = GetScrollPosition();</div><div class="code_line">&nbsp;</div><div class="code_line">// apply translation transform according to view&#39;s scroll position</div><div class="code_line">D2D1_MATRIX_3X2_F matrix = D2D1::Matrix3x2F::Translation((float) -point.x, (float) -point.y);</div><div class="code_line">pRenderTarget-&#62;SetTransform(matrix);</div><div class="code_line">&nbsp;</div><div class="code_line">//CRect rect(0, 0, sizeTotal.cx, sizeTotal.cy);</div><div class="code_line">//m_pLinearGradientBrush-&#62;SetEndPoint(CPoint(sizeTotal.cx, sizeTotal.cy));</div><div class="code_line">//pRenderTarget-&#62;FillRectangle(rect, m_pLinearGradientBrush);</div><div class="code_line">&nbsp;</div><div class="code_line">CD2DBitmap BM(pRenderTarget, _T(&quot;&quot;));</div><div class="code_line">m_pBRender-&#62;GetBitmap(BM);</div><div class="code_line">CD2DSizeF size = BM.GetSize();</div><div class="code_line">pRenderTarget-&#62;DrawBitmap(&amp;BM, CD2DRectF(0, 0, sizeTotal.cx, sizeTotal.cy));</div><div class="code_line">&nbsp;</div><div class="code_line">D2D1_ROUNDED_RECT r = D2D1::RoundedRect(D2D1::RectF(110, 10.f, 200.f, 50.f), 10.f, 10.f);</div><div class="code_line">pRenderTarget-&#62;DrawRoundedRectangle(r, m_pBrushLine, 5.0f);</div><div class="code_line">pRenderTarget-&#62;FillRoundedRectangle(r, m_pBrushBG);</div><div class="code_line">pRenderTarget-&#62;DrawText(_T(&quot;Hello, World!&quot;), CRect(110, 100, 200, 150), m_pBlackBrush, m_pTextFormat);</div></ol></div></div></div></div></div></div><br>
<br>
1) Правильный подход?<br>
2) Правильно так создавать CD2DBitmap с пустой строкой в имени файла?<br>
<br>
И увидел проблему (смотреть увеличенный фрагмент 400%):<br>
Вывод текста в OnDraw2D (правый) использует антиальясинг по текущему фону, независимо от того, в каком методе отрисовывался градиент (на картинке видны розовые окантовки от фона).<br>
А текст (левый), выводимый в OnUpdate, то он, как будто рисовался на белом фоне, и он одинаковый, независимо от того, в каком методе отрисовывался градиент. Визуально получается не красиво, без сглаживания, заметно на букве W.<br>
<span class="b-attach" data-size="42340" data-hits="895" data-attach-id="62100" data-attach-post-id="0">
			<span class="b-attach__title"></span><a class='b-attach-link' href='https://forum.sources.ru/index.php?act=Attach&amp;type=post&amp;id=0&amp;attach_id=62100' title='Скачать файл' target='_blank'>2dtext.PNG</a> (, : 895)
		</span>]]></description>
        <author>Black_Dragon</author>
        <category>Программирование графики</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=418719&amp;view=findpost&amp;p=3831210</guid>
        <pubDate>Thu, 21 May 2020 02:59:55 +0000</pubDate>
        <title>Direct2D, рисование в память и его вывод</title>
        <link>https://forum.sources.ru/index.php?showtopic=418719&amp;view=findpost&amp;p=3831210</link>
        <description><![CDATA[Black_Dragon: Рисуется схема (линии, фигурки), цветом раскрашиваются, вообщем графическое состояние чего-то.<br>Изменения НЕ реал тайм (т.е. может измеряться секундами/минутами).<br>Хочется реализовать так:<br>1) Схема рисуется в память, когда происходит ее логическое изменение.<br>2) При работе с окном программы: перемещение схемы, изменение размера окна или масштаба схемы, использовался ранее нарисованный растр, как будто это уже готовая картинка.<br><br>Рисование происходит через вызов методов CHwndRenderTarget. Была идея создать такой объект, но он привязывается к окну и как с него вывести тоже не нашел.<br>Еще посещает мысли, чтоб создать какой-нибудь bitmap и в него рисовать, а потом его выводить как готовую картинку, но тоже пока ничего толкового не нашел.]]></description>
        <author>Black_Dragon</author>
        <category>Программирование графики</category>
      </item>
	
      </channel>
      </rss>
	