<?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=430390&amp;view=findpost&amp;p=3889019</guid>
        <pubDate>Mon, 03 Apr 2023 11:21:20 +0000</pubDate>
        <title>Поместить рисунок в холст - оптимально по критерию наибольших видимых габаритов.</title>
        <link>https://forum.sources.ru/index.php?showtopic=430390&amp;view=findpost&amp;p=3889019</link>
        <description><![CDATA[Сергей85: В общем, получились те же яйца - только в профиль. За эти месяцы ни разу не подвел.<br>
<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">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;const int iCanvas_X_Max = 639; //При печати: пикселей в миллиметре - 3.457шт. Соответствует ширине листа A4 210мм, минус края 24мм, минус 4 пикселя (почему они лишние - неясно).</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//Ранее было 365. 1 пиксель - жертва за ускорение разрыва страниц с помощью тега &#60;DIV&#62;.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;const int iCanvas_Y_Max = 364; //При печати: чтобы таблица с максимально 30 строками, идущая после рисунка, не уехала на другой лист. Т.о., на каждую зону - свой отдельный лист.</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;//Нужен анализ, как правильно поместить изображение в холст - чтобы его отображение было максимально большим, не растянутым и не обрезанным.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;const double dProportion_XY_Canvas = 1.0*iCanvas_X_Max/iCanvas_Y_Max; //Пропорция сторон холста.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;const double dProportion_XY_Picture = 1.0*iPicture_Width/iPicture_Height; //Пропорция сторон изображения.</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;//Для &#60;IMG&#62; нужно указывать и высоту тоже. Иначе при пустом изображении в принтер помещается значок отсутствующего рисунка, размеры которого иные, - высота искажается - текст съезжает - создание разрыва страницы работает неправильно.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;const double dProportion_XX = 1.0*iCanvas_X_Max/iPicture_Width;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;const double dProportion_YY = 1.0*iCanvas_Y_Max/iPicture_Height;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;qsResult += &quot;&#60;br&#62;&#60;center&#62;&#60;img src=\&quot;&quot; + qsTemp_Dir + &quot;/&quot; + qsZone_Number + &quot;заменить_на_пустоту.png\&quot;&quot;; //Чтобы отчет изготавливался быстро: чем больше разрешение - тем больше тормозит сохранение в PDF - и, как следствие, тормозит и функция создания разрыва страниц.</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if (dProportion_XY_Picture &#62;= dProportion_XY_Canvas) qsResult += &quot; width=&quot; + QString::number(iCanvas_X_Max) + &quot; height=&quot; + QString::number(round(iPicture_Height*dProportion_XX));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;else qsResult += &quot; width=&quot; + QString::number(round(iPicture_Width*dProportion_YY)) + &quot; height=&quot; + QString::number(iCanvas_Y_Max);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;qsResult += &quot;&#62;&#60;/img&#62;&#60;/center&#62;&#60;br&#62;&quot;;</div><div class="code_line">}</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script>]]></description>
        <author>Сергей85</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=430390&amp;view=findpost&amp;p=3879144</guid>
        <pubDate>Sat, 15 Oct 2022 10:08:09 +0000</pubDate>
        <title>Поместить рисунок в холст - оптимально по критерию наибольших видимых габаритов.</title>
        <link>https://forum.sources.ru/index.php?showtopic=430390&amp;view=findpost&amp;p=3879144</link>
        <description><![CDATA[OpenGL: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=430390&view=findpost&p=3879097'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Сергей85 &#064; <time class="tag-quote__quoted-time" datetime="2022-10-14T15:53:48+00:00">14.10.22, 15:53</time></span><div class='quote '> А не совокупность ли это вариантов, в зависимости от минимальности одной величины от другой?</div></div><br>
Я там d забыл во второй части :) Разумеется, оно в обоих координатах должно быть:  <pre>( (холст.ширина - картина.ширина*d)/2, (холст.высота - картина.высота * d)/2 )</pre>]]></description>
        <author>OpenGL</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=430390&amp;view=findpost&amp;p=3879097</guid>
        <pubDate>Fri, 14 Oct 2022 15:53:48 +0000</pubDate>
        <title>Поместить рисунок в холст - оптимально по критерию наибольших видимых габаритов.</title>
        <link>https://forum.sources.ru/index.php?showtopic=430390&amp;view=findpost&amp;p=3879097</link>
        <description><![CDATA[Сергей85: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=430390&view=findpost&p=3878814'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>OpenGL &#064; <time class="tag-quote__quoted-time" datetime="2022-10-12T17:48:30+00:00">12.10.22, 17:48</time></span><div class='quote '>Чтобы поместить картину в холст по ширине, надо её ширину умножить на dx = ширина_холста / ширина_картины. Можно брать dx меньше (очевидно, в этом случае всё равно поместится по ширине), но нельзя брать больше.<br>
Всё то же самое справедливо для высоты картины. <br>
ТО у тебя есть dx и dy, при этом ты можешь их уменьшать, но не можешь увеличивать. Значит итоговый масштабный коэффициент - минимум из этих двух величин, назовём его d.<br>
А зная масштаб, легко и позицию вычислить, достаточно просто совместить центр картины и центр холста. Т.е. позиция картины в холсте будет  <pre> ( (холст.ширина - картина.ширина*d)/2, (холст.высота - картина.высота)/2 )</pre>.</div></div><br>
А не совокупность ли это вариантов, в зависимости от минимальности одной величины от другой?<br>
<br>
( (холст.ширина - картина.ширина*d)/2, (холст.высота - картина.высота)/2 )<br>
<br>
ИЛИ<br>
<br>
( (холст.ширина - картина.ширина)/2, (холст.высота - картина.высота*d)/2 ) <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2022-10-14T16:00:04+00:00">14.10.22, 16:00</time></span></span><br>
Да, действительно, отрицательные значения. Используйте холст 100x100 и изображение 10000x10000. В иксе будет 0, в игреке будет -9900/2.]]></description>
        <author>Сергей85</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=430390&amp;view=findpost&amp;p=3878970</guid>
        <pubDate>Thu, 13 Oct 2022 15:28:32 +0000</pubDate>
        <title>Поместить рисунок в холст - оптимально по критерию наибольших видимых габаритов.</title>
        <link>https://forum.sources.ru/index.php?showtopic=430390&amp;view=findpost&amp;p=3878970</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=430390&view=findpost&p=3878966'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Akina &#064; <time class="tag-quote__quoted-time" datetime="2022-10-13T15:23:20+00:00">13.10.22, 15:23</time></span><div class='quote '>А ты не подумал, что такая формулировка НЕ ТРЕБУЕТ сохранения пропорций?</div></div><br>
Уверен, это он просто забыл упомянуть :)]]></description>
        <author>Majestio</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=430390&amp;view=findpost&amp;p=3878966</guid>
        <pubDate>Thu, 13 Oct 2022 15:23:20 +0000</pubDate>
        <title>Поместить рисунок в холст - оптимально по критерию наибольших видимых габаритов.</title>
        <link>https://forum.sources.ru/index.php?showtopic=430390&amp;view=findpost&amp;p=3878966</link>
        <description><![CDATA[Akina: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=430390&view=findpost&p=3878936'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Сергей85 &#064; <time class="tag-quote__quoted-time" datetime="2022-10-13T12:30:29+00:00">13.10.22, 12:30</time></span><div class='quote '>Критерий оптимальности, если перефразировать, - максимально возможные ширина и длина итогового изображения в пикселях.<br>
</div></div><br>
А ты не подумал, что такая формулировка НЕ ТРЕБУЕТ сохранения пропорций?]]></description>
        <author>Akina</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=430390&amp;view=findpost&amp;p=3878936</guid>
        <pubDate>Thu, 13 Oct 2022 12:30:29 +0000</pubDate>
        <title>Поместить рисунок в холст - оптимально по критерию наибольших видимых габаритов.</title>
        <link>https://forum.sources.ru/index.php?showtopic=430390&amp;view=findpost&amp;p=3878936</link>
        <description><![CDATA[Сергей85: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=430390&view=findpost&p=3878882'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Akina &#064; <time class="tag-quote__quoted-time" datetime="2022-10-13T08:52:30+00:00">13.10.22, 08:52</time></span><div class='quote '><div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=430390&view=findpost&p=3878808'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Сергей85 &#064; <time class="tag-quote__quoted-time" datetime="2022-10-12T16:50:11+00:00">12.10.22, 16:50</time></span><div class='quote '>оптимально по критерию наибольшего видимого размера?</div></div><br>
Критерий оптимальности - в студию. <br>
<br>
Если он простой - максимальное масштабирование, при котором ещё нет обрезки, то задача тривиальна. Считаем коэффициенты масштабирования, при которых изображение точно вписывается во фрейм, отдельно по горизонтали и по вертикали, и берём минимальное из них. О чём собственно и сказал <strong class='tag-b'>OpenGL</strong>. Ну и после масштабирования либо центрируем, либо прижимаем вверх-влево - это уже по вкусу.</div></div><br>
Критерий оптимальности, если перефразировать, - максимально возможные ширина и длина итогового изображения в пикселях.]]></description>
        <author>Сергей85</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=430390&amp;view=findpost&amp;p=3878933</guid>
        <pubDate>Thu, 13 Oct 2022 12:22:44 +0000</pubDate>
        <title>Поместить рисунок в холст - оптимально по критерию наибольших видимых габаритов.</title>
        <link>https://forum.sources.ru/index.php?showtopic=430390&amp;view=findpost&amp;p=3878933</link>
        <description><![CDATA[OpenGL: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=430390&view=findpost&p=3878842'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Сергей85 &#064; <time class="tag-quote__quoted-time" datetime="2022-10-13T05:39:48+00:00">13.10.22, 05:39</time></span><div class='quote '>Ведь не требуется размещать изображение в центре холста, можно и по боку: динамическая сторона автоматически уменьшится, и пустота холста с противоположного бока будет аннулирована. </div></div><br>
А это уже не так важно. Просто мне нравится по центру помещать в этом случае :) Но можешь и в (0, 0) поместить, никаких проблем, картинка всё равно поместится в твой холст.]]></description>
        <author>OpenGL</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=430390&amp;view=findpost&amp;p=3878882</guid>
        <pubDate>Thu, 13 Oct 2022 08:52:30 +0000</pubDate>
        <title>Поместить рисунок в холст - оптимально по критерию наибольших видимых габаритов.</title>
        <link>https://forum.sources.ru/index.php?showtopic=430390&amp;view=findpost&amp;p=3878882</link>
        <description><![CDATA[Akina: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=430390&view=findpost&p=3878808'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Сергей85 &#064; <time class="tag-quote__quoted-time" datetime="2022-10-12T16:50:11+00:00">12.10.22, 16:50</time></span><div class='quote '>оптимально по критерию наибольшего видимого размера?</div></div><br>
Критерий оптимальности - в студию. <br>
<br>
Если он простой - максимальное масштабирование, при котором ещё нет обрезки, то задача тривиальна. Считаем коэффициенты масштабирования, при которых изображение точно вписывается во фрейм, отдельно по горизонтали и по вертикали, и берём минимальное из них. О чём собственно и сказал <strong class='tag-b'>OpenGL</strong>. Ну и после масштабирования либо центрируем, либо прижимаем вверх-влево - это уже по вкусу.]]></description>
        <author>Akina</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=430390&amp;view=findpost&amp;p=3878850</guid>
        <pubDate>Thu, 13 Oct 2022 06:46:21 +0000</pubDate>
        <title>Поместить рисунок в холст - оптимально по критерию наибольших видимых габаритов.</title>
        <link>https://forum.sources.ru/index.php?showtopic=430390&amp;view=findpost&amp;p=3878850</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=430390&view=findpost&p=3878808'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Сергей85 &#064; <time class="tag-quote__quoted-time" datetime="2022-10-12T16:50:11+00:00">12.10.22, 16:50</time></span><div class='quote '>Холст - место для рисунка на сайте.</div></div><br>
<strong class='tag-b'>Сергей85</strong>, по сколько речь идет о сайте ... Но при этом, не идет речь об обработке изображения, кроме как масштабирования - лучше воспользоваться уже готовыми инструментами самих браузеров. Иными словами - за тебя это уже давно решили, просто необходимо правильно применить спецификацию CSS. Для твоего случая на 100% подойдет следующее:<br>
<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">object-fit: contain;</div></ol></div></div></div></div><br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '><strong class='tag-b'>contain</strong><br>
Смещаемый контент меняет свой размер таким образом, чтобы подстроиться под область внутри блока пропорционально собственным параметрам: окончательный размер контента будет определён как &quot;помещённый внутрь&quot; блока, ограничиваясь его шириной и высотой. Касаемо изображений-фонов, очень похоже на &quot;background-size: contain&quot; - масштабирует картинку так, чтобы она максимально накрыла собой весь блок. Картинка при этом не обрезается, а вписывается в блок с сохранением пропорций. <a class='tag-url' href='https://developer.mozilla.org/ru/docs/Web/CSS/object-fit' target='_blank'>Ссылка на доку</a></div></div><br>
Вот тебе <a class='tag-url' href='https://jsfiddle.net/za3uqxdo/' target='_blank'>демонстрационный пример</a>. В нем ты увидишь два варианта:<br>
<br>
<ul class="tag-list"><li>В &quot;холст&quot; размером 200x100 пикселей вписывается изображение размером 120x120 пикселей</li><li>В &quot;холст&quot; размером 100x200 пикселей вписывается изображение размером 100x300 пикселей</li></ul><br>
Как видишь, изображение пытается занять максимальные размеры для отображения, при этом сохраняя свои пропорции. За возможность масштабирования и выравнивания отвечают атрибуты &quot;холстов&quot; - &quot;flex&quot; и &quot;justify-content&quot;. При таком использовании отрисовки изображений на веб-странице - вообще не нужно заранее знать/задавать размеры как холстов, так и изображений. Браузер все сделает сам. Однако, при выводе желательно хоть как-то близко подбирать пропорции холста и изображения - тогда &quot;вписывание&quot; будет наиболее удачным.<br>
<br>
И второй момент. Если не устраивают заранее заданные таблицы стилей в отдельном css-файле, то можно использовать атрибут &quot;style&quot; при выводе самой страницы. Разница минимальна (только порядок применения стилей), ну и несколько разрастется сам код страницы.]]></description>
        <author>Majestio</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=430390&amp;view=findpost&amp;p=3878842</guid>
        <pubDate>Thu, 13 Oct 2022 05:39:48 +0000</pubDate>
        <title>Поместить рисунок в холст - оптимально по критерию наибольших видимых габаритов.</title>
        <link>https://forum.sources.ru/index.php?showtopic=430390&amp;view=findpost&amp;p=3878842</link>
        <description><![CDATA[Сергей85: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=430390&view=findpost&p=3878814'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>OpenGL &#064; <time class="tag-quote__quoted-time" datetime="2022-10-12T17:48:30+00:00">12.10.22, 17:48</time></span><div class='quote '></div></div><br>
Пусть так.<br>
<br>
Но является ли мой представленный способ - рабочим? Ведь не требуется размещать изображение в центре холста, можно и по боку: динамическая сторона автоматически уменьшится, и пустота холста с противоположного бока будет аннулирована.]]></description>
        <author>Сергей85</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=430390&amp;view=findpost&amp;p=3878814</guid>
        <pubDate>Wed, 12 Oct 2022 17:48:30 +0000</pubDate>
        <title>Поместить рисунок в холст - оптимально по критерию наибольших видимых габаритов.</title>
        <link>https://forum.sources.ru/index.php?showtopic=430390&amp;view=findpost&amp;p=3878814</link>
        <description><![CDATA[OpenGL: Чтобы поместить картину в холст по ширине, надо её ширину умножить на dx = ширина_холста / ширина_картины. Можно брать dx меньше (очевидно, в этом случае всё равно поместится по ширине), но нельзя брать больше.<br>
Всё то же самое справедливо для высоты картины. <br>
ТО у тебя есть dx и dy, при этом ты можешь их уменьшать, но не можешь увеличивать. Значит итоговый масштабный коэффициент - минимум из этих двух величин, назовём его d.<br>
А зная масштаб, легко и позицию вычислить, достаточно просто совместить центр картины и центр холста. Т.е. позиция картины в холсте будет  <pre> ( (холст.ширина - картина.ширина*d)/2, (холст.высота - картина.высота)/2 )</pre>.]]></description>
        <author>OpenGL</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=430390&amp;view=findpost&amp;p=3878808</guid>
        <pubDate>Wed, 12 Oct 2022 16:50:11 +0000</pubDate>
        <title>Поместить рисунок в холст - оптимально по критерию наибольших видимых габаритов.</title>
        <link>https://forum.sources.ru/index.php?showtopic=430390&amp;view=findpost&amp;p=3878808</link>
        <description><![CDATA[Сергей85: Математическая задачка. Есть холст, который может быть произвольного размера и формы -<br><br>- но фиксированного в конкретный момент времени. Холст - место для рисунка на сайте.<br><br>И есть рисунок. Его размеры и пропорции такие же рэндомные, как у холста, - но когда известны постоянные размеры холста - так же известны и постоянные размеры рисунка.<br><br>При этом, существует явление интерполяции: при рисунке 200x200 и холсте 2000x2000 - рисунок растянет на странице сайта и он займет весь холст - хорошо. И, наоборот, при рисунке 2000x2000 и холсте 200x200 - рисунок тупо сожмет в 100 раз - тоже хорошо.<br><br>Как написать алгоритм, при котором любой рисунок будет помещаться в любой холст - оптимально по критерию наибольшего видимого размера?<br><br>Единственное, что приходит в голову, формулы с пропорциями размеров по ширине и высоте:<br>if (dProportion_XY_Picture &gt;= dProportion_XY_Canvas) qsResult += &quot; width=&quot; + qsCanvas_X_Max; //Прилепить к верхней стенке холста.<br>else qsResult += &quot; height=&quot; + qsCanvas_Y_Max; //К боковой стенке.<br><br>При этом неуказанная грань размера изображения будет отмасштабирована автоматически.]]></description>
        <author>Сергей85</author>
        <category>Алгоритмы</category>
      </item>
	
      </channel>
      </rss>
	