<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[boost::gil und 64bit]]></title><description><![CDATA[<p>Hallo.<br />
Ich möchte ein Programm (es ist sehr ähnlich dem resize-Beispiel von boost <a href="http://www.boost.org/doc/libs/1_52_0/libs/gil/example/resize.cpp" rel="nofollow">http://www.boost.org/doc/libs/1_52_0/libs/gil/example/resize.cpp</a>) mittels einem 64bit Bompiler compilieren.</p>
<p>kleiner code-auszug:</p>
<pre><code>boost::gil::bgr8_image_t img;
boost::gil::jpeg_read_image(path+file,img);
boost::gil::rgb8_image_t square100x100(usewidth,useheight);

boost::gil::resize_view(const_view(img), view(square100x100), bilinear_sampler());
</code></pre>
<p>Leider bekomme ich folgendes Fehlermeldung:</p>
<pre><code>In file included from image.cpp:137:
/coding/boost/gil/extension/numeric/sampler.hpp: In function »bool boost::gil::sample(boost::gil::bilinear_sampler, const SrcView&amp;, const boost::gil::point2&lt;F&gt;&amp;, DstP&amp;) [with DstP = boost::gil::pixel&lt;unsigned char, boost::gil::layout&lt;boost::mpl::vector3&lt;boost::gil::red_t, boost::gil::green_t, boost::gil::blue_t&gt;, boost::mpl::range_c&lt;int, 0, 3&gt; &gt; &gt;, SrcView = boost::gil::image_view&lt;boost::gil::memory_based_2d_locator&lt;boost::gil::memory_based_step_iterator&lt;const boost::gil::bgr8c_pixel_t*&gt; &gt; &gt;, F = double]«:
/coding/boost/gil/extension/numeric/resample.hpp:53:   instantiated from »void boost::gil::resample_pixels(const SrcView&amp;, const DstView&amp;, const MapFn&amp;, Sampler) [with Sampler = boost::gil::bilinear_sampler, SrcView = boost::gil::image_view&lt;boost::gil::memory_based_2d_locator&lt;boost::gil::memory_based_step_iterator&lt;const boost::gil::bgr8c_pixel_t*&gt; &gt; &gt;, DstView = boost::gil::image_view&lt;boost::gil::memory_based_2d_locator&lt;boost::gil::memory_based_step_iterator&lt;boost::gil::rgb8_pixel_t*&gt; &gt; &gt;, MapFn = boost::gil::matrix3x2&lt;double&gt;]«
/coding/boost/gil/extension/numeric/resample.hpp:125:   instantiated from »void boost::gil::resample_subimage(const SrcMetaView&amp;, const DstMetaView&amp;, double, double, double, double, double, const Sampler&amp;) [with Sampler = boost::gil::bilinear_sampler, SrcMetaView = boost::gil::image_view&lt;boost::gil::memory_based_2d_locator&lt;boost::gil::memory_based_step_iterator&lt;const boost::gil::bgr8c_pixel_t*&gt; &gt; &gt;, DstMetaView = boost::gil::image_view&lt;boost::gil::memory_based_2d_locator&lt;boost::gil::memory_based_step_iterator&lt;boost::gil::rgb8_pixel_t*&gt; &gt; &gt;]«
/coding/boost/gil/extension/numeric/resample.hpp:136:   instantiated from »void boost::gil::resize_view(const SrcMetaView&amp;, const DstMetaView&amp;, const Sampler&amp;) [with Sampler = boost::gil::bilinear_sampler, SrcMetaView = boost::gil::image_view&lt;boost::gil::memory_based_2d_locator&lt;boost::gil::memory_based_step_iterator&lt;const boost::gil::bgr8c_pixel_t*&gt; &gt; &gt;, DstMetaView = boost::gil::image_view&lt;boost::gil::memory_based_2d_locator&lt;boost::gil::memory_based_step_iterator&lt;boost::gil::rgb8_pixel_t*&gt; &gt; &gt;]«
image.cpp:285:   instantiated from here
/coding/boost/gil/extension/numeric/sampler.hpp:105: Fehler: keine passende Funktion für Aufruf von »boost::gil::point2&lt;int&gt;::point2(boost::gil::point2&lt;long int&gt;)«
/coding/boost/gil/utilities.hpp:75: Anmerkung: Kandidaten sind: boost::gil::point2&lt;T&gt;::point2(const boost::gil::point2&lt;T&gt;&amp;) [with T = int]
/coding/boost/gil/utilities.hpp:74: Anmerkung:                  boost::gil::point2&lt;T&gt;::point2(T, T) [with T = int]
/coding/boost/gil/utilities.hpp:73: Anmerkung:                  boost::gil::point2&lt;T&gt;::point2() [with T = int]
</code></pre>
<p>image.cpp Zeile 137:</p>
<pre><code>#include &quot;boost/gil/extension/numeric/sampler.hpp&quot;
</code></pre>
<p>image.cpp Zeile 285</p>
<pre><code>boost::gil::resize_view(const_view(img), view(square100x100), bilinear_sampler());
</code></pre>
<p>Das Problem an sich habe ich eigentlich auch gefunden in der sampler.hpp</p>
<pre><code>point2&lt;int&gt; p0(ifloor(p)); // the closest integer coordinate top left from p
</code></pre>
<p>ifloor ist die böse Funktion bzw. std::ptrdiff_t:</p>
<pre><code>inline point2&lt;std::ptrdiff_t&gt; ifloor(const point2&lt;float &gt;&amp; p)  { return point2&lt;std::ptrdiff_t&gt;(ifloor(p.x),ifloor(p.y)); }
inline point2&lt;std::ptrdiff_t&gt; ifloor(const point2&lt;double&gt;&amp; p)  { return point2&lt;std::ptrdiff_t&gt;(ifloor(p.x),ifloor(p.y)); }
</code></pre>
<p>Ein möglicher workaround könnte folgender sein:</p>
<pre><code>point2&lt;int&gt; p0(ifloor(p));
</code></pre>
<p>wird folgend ersetzt</p>
<pre><code>point2&lt;int&gt; p0(ifloor(p).x, ifloor(p).y );
</code></pre>
<p>ABER sollte das die Lösung sein?<br />
Laut der boost Versionhistory werden ja auch alle Libs mit 64bit compilern getestet. Habe ich hier noch einen Fehler in meiner boost-Umgebung oder ist das ein bug in der boost?</p>
<p>Danke für die Hilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/312933/boost-gil-und-64bit</link><generator>RSS for Node</generator><lastBuildDate>Sun, 02 Aug 2026 12:01:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/312933.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 17 Jan 2013 14:36:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to boost::gil und 64bit on Thu, 17 Jan 2013 14:36:17 GMT]]></title><description><![CDATA[<p>Hallo.<br />
Ich möchte ein Programm (es ist sehr ähnlich dem resize-Beispiel von boost <a href="http://www.boost.org/doc/libs/1_52_0/libs/gil/example/resize.cpp" rel="nofollow">http://www.boost.org/doc/libs/1_52_0/libs/gil/example/resize.cpp</a>) mittels einem 64bit Bompiler compilieren.</p>
<p>kleiner code-auszug:</p>
<pre><code>boost::gil::bgr8_image_t img;
boost::gil::jpeg_read_image(path+file,img);
boost::gil::rgb8_image_t square100x100(usewidth,useheight);

boost::gil::resize_view(const_view(img), view(square100x100), bilinear_sampler());
</code></pre>
<p>Leider bekomme ich folgendes Fehlermeldung:</p>
<pre><code>In file included from image.cpp:137:
/coding/boost/gil/extension/numeric/sampler.hpp: In function »bool boost::gil::sample(boost::gil::bilinear_sampler, const SrcView&amp;, const boost::gil::point2&lt;F&gt;&amp;, DstP&amp;) [with DstP = boost::gil::pixel&lt;unsigned char, boost::gil::layout&lt;boost::mpl::vector3&lt;boost::gil::red_t, boost::gil::green_t, boost::gil::blue_t&gt;, boost::mpl::range_c&lt;int, 0, 3&gt; &gt; &gt;, SrcView = boost::gil::image_view&lt;boost::gil::memory_based_2d_locator&lt;boost::gil::memory_based_step_iterator&lt;const boost::gil::bgr8c_pixel_t*&gt; &gt; &gt;, F = double]«:
/coding/boost/gil/extension/numeric/resample.hpp:53:   instantiated from »void boost::gil::resample_pixels(const SrcView&amp;, const DstView&amp;, const MapFn&amp;, Sampler) [with Sampler = boost::gil::bilinear_sampler, SrcView = boost::gil::image_view&lt;boost::gil::memory_based_2d_locator&lt;boost::gil::memory_based_step_iterator&lt;const boost::gil::bgr8c_pixel_t*&gt; &gt; &gt;, DstView = boost::gil::image_view&lt;boost::gil::memory_based_2d_locator&lt;boost::gil::memory_based_step_iterator&lt;boost::gil::rgb8_pixel_t*&gt; &gt; &gt;, MapFn = boost::gil::matrix3x2&lt;double&gt;]«
/coding/boost/gil/extension/numeric/resample.hpp:125:   instantiated from »void boost::gil::resample_subimage(const SrcMetaView&amp;, const DstMetaView&amp;, double, double, double, double, double, const Sampler&amp;) [with Sampler = boost::gil::bilinear_sampler, SrcMetaView = boost::gil::image_view&lt;boost::gil::memory_based_2d_locator&lt;boost::gil::memory_based_step_iterator&lt;const boost::gil::bgr8c_pixel_t*&gt; &gt; &gt;, DstMetaView = boost::gil::image_view&lt;boost::gil::memory_based_2d_locator&lt;boost::gil::memory_based_step_iterator&lt;boost::gil::rgb8_pixel_t*&gt; &gt; &gt;]«
/coding/boost/gil/extension/numeric/resample.hpp:136:   instantiated from »void boost::gil::resize_view(const SrcMetaView&amp;, const DstMetaView&amp;, const Sampler&amp;) [with Sampler = boost::gil::bilinear_sampler, SrcMetaView = boost::gil::image_view&lt;boost::gil::memory_based_2d_locator&lt;boost::gil::memory_based_step_iterator&lt;const boost::gil::bgr8c_pixel_t*&gt; &gt; &gt;, DstMetaView = boost::gil::image_view&lt;boost::gil::memory_based_2d_locator&lt;boost::gil::memory_based_step_iterator&lt;boost::gil::rgb8_pixel_t*&gt; &gt; &gt;]«
image.cpp:285:   instantiated from here
/coding/boost/gil/extension/numeric/sampler.hpp:105: Fehler: keine passende Funktion für Aufruf von »boost::gil::point2&lt;int&gt;::point2(boost::gil::point2&lt;long int&gt;)«
/coding/boost/gil/utilities.hpp:75: Anmerkung: Kandidaten sind: boost::gil::point2&lt;T&gt;::point2(const boost::gil::point2&lt;T&gt;&amp;) [with T = int]
/coding/boost/gil/utilities.hpp:74: Anmerkung:                  boost::gil::point2&lt;T&gt;::point2(T, T) [with T = int]
/coding/boost/gil/utilities.hpp:73: Anmerkung:                  boost::gil::point2&lt;T&gt;::point2() [with T = int]
</code></pre>
<p>image.cpp Zeile 137:</p>
<pre><code>#include &quot;boost/gil/extension/numeric/sampler.hpp&quot;
</code></pre>
<p>image.cpp Zeile 285</p>
<pre><code>boost::gil::resize_view(const_view(img), view(square100x100), bilinear_sampler());
</code></pre>
<p>Das Problem an sich habe ich eigentlich auch gefunden in der sampler.hpp</p>
<pre><code>point2&lt;int&gt; p0(ifloor(p)); // the closest integer coordinate top left from p
</code></pre>
<p>ifloor ist die böse Funktion bzw. std::ptrdiff_t:</p>
<pre><code>inline point2&lt;std::ptrdiff_t&gt; ifloor(const point2&lt;float &gt;&amp; p)  { return point2&lt;std::ptrdiff_t&gt;(ifloor(p.x),ifloor(p.y)); }
inline point2&lt;std::ptrdiff_t&gt; ifloor(const point2&lt;double&gt;&amp; p)  { return point2&lt;std::ptrdiff_t&gt;(ifloor(p.x),ifloor(p.y)); }
</code></pre>
<p>Ein möglicher workaround könnte folgender sein:</p>
<pre><code>point2&lt;int&gt; p0(ifloor(p));
</code></pre>
<p>wird folgend ersetzt</p>
<pre><code>point2&lt;int&gt; p0(ifloor(p).x, ifloor(p).y );
</code></pre>
<p>ABER sollte das die Lösung sein?<br />
Laut der boost Versionhistory werden ja auch alle Libs mit 64bit compilern getestet. Habe ich hier noch einen Fehler in meiner boost-Umgebung oder ist das ein bug in der boost?</p>
<p>Danke für die Hilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2290713</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2290713</guid><dc:creator><![CDATA[Boost64]]></dc:creator><pubDate>Thu, 17 Jan 2013 14:36:17 GMT</pubDate></item><item><title><![CDATA[Reply to boost::gil und 64bit on Thu, 17 Jan 2013 17:32:34 GMT]]></title><description><![CDATA[<p>Wo wird in dem verlinkten Beispiel point2&lt;int&gt; verwendet? O.o<br />
Und warum verwendest du nicht einfach point2&lt;ptrdiff_t&gt;?<br />
(bzw. auto, wenn du einen C++11 Compiler hast dun dir point2&lt;ptrdiff_t&gt; zu viel tipparbeit ist)</p>
<p>Du solltest bedenken, dass int auch bei einem 64-Bit-Kompilat immer noch 32 Bit groß ist.<br />
Das heißt entweder, dir gehen Informationen verloren, wenn du von point2&lt;ptrdiff_t&gt; nach point2&lt;int&gt; umwandelst,<br />
oder du kennst den Wertebereich und weißt, dass jeder Wert in einen int passt.<br />
In letzterem Fall wirst du wohl trotzdem den workaround nutzen müssen.</p>
<p>PS.: Mach bei dem workaround aus</p>
<pre><code>point2&lt;int&gt; p0(ifloor(p).x, ifloor(p).y );
</code></pre>
<p>lieber</p>
<pre><code>point2&lt;int&gt; p0(ifloor(p.x), ifloor(p.y) );
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2290759</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2290759</guid><dc:creator><![CDATA[DrakoXP]]></dc:creator><pubDate>Thu, 17 Jan 2013 17:32:34 GMT</pubDate></item><item><title><![CDATA[Reply to boost::gil und 64bit on Fri, 18 Jan 2013 07:11:05 GMT]]></title><description><![CDATA[<p>DrakoXP schrieb:</p>
<blockquote>
<p>Wo wird in dem verlinkten Beispiel point2&lt;int&gt; verwendet? O.o</p>
</blockquote>
<p>wird im boost-source boost/gil/extension/numeric/resample.hpp:103 verwendet</p>
<p>DrakoXP schrieb:</p>
<blockquote>
<p>Du solltest bedenken, dass int auch bei einem 64-Bit-Kompilat immer noch 32 Bit groß ist.<br />
Das heißt entweder, dir gehen Informationen verloren, wenn du von point2&lt;ptrdiff_t&gt; nach point2&lt;int&gt; umwandelst,<br />
oder du kennst den Wertebereich und weißt, dass jeder Wert in einen int passt.</p>
</blockquote>
<p>Da mein Programm bist vor kurzem nur in einer 32bit Umgebung gelaufen ist, denke ich, dass auch in einer 64bit Umgebung ein int Wert ausreicht.</p>
<p>DrakoXP schrieb:</p>
<blockquote>
<p>In letzterem Fall wirst du wohl trotzdem den workaround nutzen müssen.</p>
<p>PS.: Mach bei dem workaround aus</p>
<pre><code>point2&lt;int&gt; p0(ifloor(p).x, ifloor(p).y );
</code></pre>
<p>lieber</p>
<pre><code>point2&lt;int&gt; p0(ifloor(p.x), ifloor(p.y) );
</code></pre>
</blockquote>
<p>hmm, warum ist die von dir vorgeschlagene Variante besser?</p>
<p>Ev. sollte ich nochmal betonen, dass ich boost/gil/extension Sourcecode verändern muss, damit es compilefähig ist, ist sowas normal oder eher nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2290886</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2290886</guid><dc:creator><![CDATA[Boost64]]></dc:creator><pubDate>Fri, 18 Jan 2013 07:11:05 GMT</pubDate></item></channel></rss>