<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic using ippiAlphaComp with separate RGB and A buffers in Intel® Integrated Performance Primitives</title>
    <link>https://community.intel.com/t5/Intel-Integrated-Performance/using-ippiAlphaComp-with-separate-RGB-and-A-buffers/m-p/1120700#M25567</link>
    <description>&lt;P&gt;Hi - I'm trying to composite images where the RGB and Alpha channels are held in different image buffers.&lt;/P&gt;

&lt;P&gt;My app uses windows GDI bitmaps (BGR order) for to hold color information, and a home-built image format to hold a one-byte-per-pixel alpha channel. The alpha is independent from the RGB and needs to be kept separate.&lt;/P&gt;

&lt;P&gt;I can pass pointers to my buffers to IPP as Ipp8u for functions expecting 8u_C3R and 8u_C1R.&lt;/P&gt;

&lt;P&gt;However &lt;SPAN class="kwd"&gt;ippiAlphaComp&lt;/SPAN&gt; seems to work only with &lt;SPAN class="keyword"&gt;8u_AC4R&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;

&lt;P&gt;Question 1: could you add a variant of AlphaComp that takes 8u_C3R for RGB plus 8u_C1R for alpha.&lt;/P&gt;

&lt;P&gt;&lt;SPAN class="keyword"&gt;... so I gather that I need to interleave the alpha and RGB images... ? convert RGB to RGB_ for the foreground, then copy A into that buffer producing the foreground RGBA, then convert RGB to RGB_ for the background,&lt;/SPAN&gt; then do the alpha composite, then unpack everything. YUCK.&lt;/P&gt;

&lt;P&gt;Question 2: am I missing something or do I really need to allocate new buffers, interleave them, etc etc?&lt;/P&gt;

&lt;P&gt;Question 3: How do I efficiently insert an 8-bit Alpha channel from an 8u_C1R image into just one channel of an 8u_C4R image? I can't find a way.&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&lt;SPAN class="keyword"&gt;if pFG is a windows 24-bit BGR image, then....&lt;/SPAN&gt;&lt;/P&gt;

&lt;P&gt;&lt;SPAN class="keyword"&gt;// convert the FB 24-bit RGB into 32-bit RGB_&lt;/SPAN&gt;&lt;/P&gt;

&lt;PRE style="font-family:Consolas;font-size:27;color:black;background:white;"&gt;&lt;SPAN style="color:#2b91af;"&gt;Ipp8u&lt;/SPAN&gt;*&amp;nbsp;lFG&amp;nbsp;=&amp;nbsp;&lt;SPAN style="color:gray;"&gt;pFG&lt;/SPAN&gt;.GetBitsAddress();  // my DIB wrapper
&lt;SPAN style="color:blue;"&gt;int&lt;/SPAN&gt;&amp;nbsp;FGStep&amp;nbsp;=&amp;nbsp;&lt;SPAN style="color:gray;"&gt;pFG&lt;/SPAN&gt;.GetScanLineWidthBytes();   // my DIB wrapper
&lt;SPAN style="color:blue;"&gt;int&lt;/SPAN&gt;&amp;nbsp;lFG_RGBA_StepBytes&amp;nbsp;=&amp;nbsp;0;
&lt;SPAN style="color:#2b91af;"&gt;Ipp8u&lt;/SPAN&gt;&amp;nbsp;* lFG_RGBA_Buffer&amp;nbsp;=&amp;nbsp;&lt;SPAN style="color:#6f008a;"&gt;NULL&lt;/SPAN&gt;;
lFG_RGBA_Buffer&amp;nbsp;=&amp;nbsp;(&lt;SPAN style="color:#2b91af;"&gt;Ipp8u&lt;/SPAN&gt;*)ippiMalloc_8u_AC4(lWidth,&amp;nbsp;lHeight,&amp;nbsp;&amp;amp;lFG_RGBA_StepBytes);
&lt;SPAN style="color:green;"&gt;//&amp;nbsp;copy&amp;nbsp;RGB&amp;nbsp;into&amp;nbsp;RGBA-sized&amp;nbsp;buffer&lt;/SPAN&gt;
ippiCopy_8u_AC4C3R(lFG,&amp;nbsp;FGStep,&amp;nbsp;pFG_RGBA_Buffer,&amp;nbsp;lFG_RGBA_StepBytes,&amp;nbsp;roiSize);
&lt;/PRE&gt;

&lt;P&gt;// same for the background&lt;/P&gt;

&lt;PRE style="font-family:Consolas;font-size:27;color:black;background:white;"&gt;&lt;SPAN style="color:#2b91af;"&gt;Ipp8u&lt;/SPAN&gt;*&amp;nbsp;lBG&amp;nbsp;=&amp;nbsp;&lt;SPAN style="color:gray;"&gt;pBG&lt;/SPAN&gt;.GetBitsAddress();  // my DIB wrapper
&lt;SPAN style="color:blue;"&gt;int&lt;/SPAN&gt; BGStep&amp;nbsp;=&amp;nbsp;&lt;SPAN style="color:gray;"&gt;pBG&lt;/SPAN&gt;.GetScanLineWidthBytes();   // my DIB wrapper
&lt;SPAN style="color:blue;"&gt;int&lt;/SPAN&gt;&amp;nbsp;lBG_RGBA_StepBytes&amp;nbsp;=&amp;nbsp;0;
&lt;SPAN style="color:#2b91af;"&gt;Ipp8u&lt;/SPAN&gt;&amp;nbsp;* lBG_RGBA_Buffer&amp;nbsp;=&amp;nbsp;&lt;SPAN style="color:#6f008a;"&gt;NULL&lt;/SPAN&gt;;
lBG_RGBA_Buffer&amp;nbsp;=&amp;nbsp;(&lt;SPAN style="color:#2b91af;"&gt;Ipp8u&lt;/SPAN&gt;*)ippiMalloc_8u_AC4(lWidth,&amp;nbsp;lHeight,&amp;nbsp;&amp;amp;lBG_RGBA_StepBytes);
&lt;SPAN style="color:green;"&gt;//&amp;nbsp;copy&amp;nbsp;RGB&amp;nbsp;into&amp;nbsp;RGBA-sized&amp;nbsp;buffer&lt;/SPAN&gt;
ippiCopy_8u_AC4C3R(lBG, BGStep,&amp;nbsp;pBG_RGBA_Buffer,&amp;nbsp;lBG_RGBA_StepBytes,&amp;nbsp;roiSize);

// get the alpha for the foreground
&lt;/PRE&gt;

&lt;PRE style="font-family:Consolas;font-size:27;color:black;background:white;"&gt;&lt;SPAN style="color:#2b91af;"&gt;Ipp8u&lt;/SPAN&gt;*&amp;nbsp;lA = &lt;SPAN style="color:gray;"&gt;pAlpha.&lt;/SPAN&gt;GetBitsAddress();  // my DIB wrapper
&lt;SPAN style="color:blue;"&gt;int&lt;/SPAN&gt; AStep&amp;nbsp;= pAlpha.GetScanLineWidthBytes();   // my DIB wrapper
&lt;/PRE&gt;

&lt;P&gt;... but now what? Which IPP command will insert lA into lBG_RGBA_Buffer?&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;Thank you for any guidance you can provide,&lt;/P&gt;

&lt;P&gt;---Mike.&lt;/P&gt;</description>
    <pubDate>Fri, 08 Jul 2016 01:43:18 GMT</pubDate>
    <dc:creator>Michael_S_10</dc:creator>
    <dc:date>2016-07-08T01:43:18Z</dc:date>
    <item>
      <title>using ippiAlphaComp with separate RGB and A buffers</title>
      <link>https://community.intel.com/t5/Intel-Integrated-Performance/using-ippiAlphaComp-with-separate-RGB-and-A-buffers/m-p/1120700#M25567</link>
      <description>&lt;P&gt;Hi - I'm trying to composite images where the RGB and Alpha channels are held in different image buffers.&lt;/P&gt;

&lt;P&gt;My app uses windows GDI bitmaps (BGR order) for to hold color information, and a home-built image format to hold a one-byte-per-pixel alpha channel. The alpha is independent from the RGB and needs to be kept separate.&lt;/P&gt;

&lt;P&gt;I can pass pointers to my buffers to IPP as Ipp8u for functions expecting 8u_C3R and 8u_C1R.&lt;/P&gt;

&lt;P&gt;However &lt;SPAN class="kwd"&gt;ippiAlphaComp&lt;/SPAN&gt; seems to work only with &lt;SPAN class="keyword"&gt;8u_AC4R&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;

&lt;P&gt;Question 1: could you add a variant of AlphaComp that takes 8u_C3R for RGB plus 8u_C1R for alpha.&lt;/P&gt;

&lt;P&gt;&lt;SPAN class="keyword"&gt;... so I gather that I need to interleave the alpha and RGB images... ? convert RGB to RGB_ for the foreground, then copy A into that buffer producing the foreground RGBA, then convert RGB to RGB_ for the background,&lt;/SPAN&gt; then do the alpha composite, then unpack everything. YUCK.&lt;/P&gt;

&lt;P&gt;Question 2: am I missing something or do I really need to allocate new buffers, interleave them, etc etc?&lt;/P&gt;

&lt;P&gt;Question 3: How do I efficiently insert an 8-bit Alpha channel from an 8u_C1R image into just one channel of an 8u_C4R image? I can't find a way.&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&lt;SPAN class="keyword"&gt;if pFG is a windows 24-bit BGR image, then....&lt;/SPAN&gt;&lt;/P&gt;

&lt;P&gt;&lt;SPAN class="keyword"&gt;// convert the FB 24-bit RGB into 32-bit RGB_&lt;/SPAN&gt;&lt;/P&gt;

&lt;PRE style="font-family:Consolas;font-size:27;color:black;background:white;"&gt;&lt;SPAN style="color:#2b91af;"&gt;Ipp8u&lt;/SPAN&gt;*&amp;nbsp;lFG&amp;nbsp;=&amp;nbsp;&lt;SPAN style="color:gray;"&gt;pFG&lt;/SPAN&gt;.GetBitsAddress();  // my DIB wrapper
&lt;SPAN style="color:blue;"&gt;int&lt;/SPAN&gt;&amp;nbsp;FGStep&amp;nbsp;=&amp;nbsp;&lt;SPAN style="color:gray;"&gt;pFG&lt;/SPAN&gt;.GetScanLineWidthBytes();   // my DIB wrapper
&lt;SPAN style="color:blue;"&gt;int&lt;/SPAN&gt;&amp;nbsp;lFG_RGBA_StepBytes&amp;nbsp;=&amp;nbsp;0;
&lt;SPAN style="color:#2b91af;"&gt;Ipp8u&lt;/SPAN&gt;&amp;nbsp;* lFG_RGBA_Buffer&amp;nbsp;=&amp;nbsp;&lt;SPAN style="color:#6f008a;"&gt;NULL&lt;/SPAN&gt;;
lFG_RGBA_Buffer&amp;nbsp;=&amp;nbsp;(&lt;SPAN style="color:#2b91af;"&gt;Ipp8u&lt;/SPAN&gt;*)ippiMalloc_8u_AC4(lWidth,&amp;nbsp;lHeight,&amp;nbsp;&amp;amp;lFG_RGBA_StepBytes);
&lt;SPAN style="color:green;"&gt;//&amp;nbsp;copy&amp;nbsp;RGB&amp;nbsp;into&amp;nbsp;RGBA-sized&amp;nbsp;buffer&lt;/SPAN&gt;
ippiCopy_8u_AC4C3R(lFG,&amp;nbsp;FGStep,&amp;nbsp;pFG_RGBA_Buffer,&amp;nbsp;lFG_RGBA_StepBytes,&amp;nbsp;roiSize);
&lt;/PRE&gt;

&lt;P&gt;// same for the background&lt;/P&gt;

&lt;PRE style="font-family:Consolas;font-size:27;color:black;background:white;"&gt;&lt;SPAN style="color:#2b91af;"&gt;Ipp8u&lt;/SPAN&gt;*&amp;nbsp;lBG&amp;nbsp;=&amp;nbsp;&lt;SPAN style="color:gray;"&gt;pBG&lt;/SPAN&gt;.GetBitsAddress();  // my DIB wrapper
&lt;SPAN style="color:blue;"&gt;int&lt;/SPAN&gt; BGStep&amp;nbsp;=&amp;nbsp;&lt;SPAN style="color:gray;"&gt;pBG&lt;/SPAN&gt;.GetScanLineWidthBytes();   // my DIB wrapper
&lt;SPAN style="color:blue;"&gt;int&lt;/SPAN&gt;&amp;nbsp;lBG_RGBA_StepBytes&amp;nbsp;=&amp;nbsp;0;
&lt;SPAN style="color:#2b91af;"&gt;Ipp8u&lt;/SPAN&gt;&amp;nbsp;* lBG_RGBA_Buffer&amp;nbsp;=&amp;nbsp;&lt;SPAN style="color:#6f008a;"&gt;NULL&lt;/SPAN&gt;;
lBG_RGBA_Buffer&amp;nbsp;=&amp;nbsp;(&lt;SPAN style="color:#2b91af;"&gt;Ipp8u&lt;/SPAN&gt;*)ippiMalloc_8u_AC4(lWidth,&amp;nbsp;lHeight,&amp;nbsp;&amp;amp;lBG_RGBA_StepBytes);
&lt;SPAN style="color:green;"&gt;//&amp;nbsp;copy&amp;nbsp;RGB&amp;nbsp;into&amp;nbsp;RGBA-sized&amp;nbsp;buffer&lt;/SPAN&gt;
ippiCopy_8u_AC4C3R(lBG, BGStep,&amp;nbsp;pBG_RGBA_Buffer,&amp;nbsp;lBG_RGBA_StepBytes,&amp;nbsp;roiSize);

// get the alpha for the foreground
&lt;/PRE&gt;

&lt;PRE style="font-family:Consolas;font-size:27;color:black;background:white;"&gt;&lt;SPAN style="color:#2b91af;"&gt;Ipp8u&lt;/SPAN&gt;*&amp;nbsp;lA = &lt;SPAN style="color:gray;"&gt;pAlpha.&lt;/SPAN&gt;GetBitsAddress();  // my DIB wrapper
&lt;SPAN style="color:blue;"&gt;int&lt;/SPAN&gt; AStep&amp;nbsp;= pAlpha.GetScanLineWidthBytes();   // my DIB wrapper
&lt;/PRE&gt;

&lt;P&gt;... but now what? Which IPP command will insert lA into lBG_RGBA_Buffer?&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;Thank you for any guidance you can provide,&lt;/P&gt;

&lt;P&gt;---Mike.&lt;/P&gt;</description>
      <pubDate>Fri, 08 Jul 2016 01:43:18 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Integrated-Performance/using-ippiAlphaComp-with-separate-RGB-and-A-buffers/m-p/1120700#M25567</guid>
      <dc:creator>Michael_S_10</dc:creator>
      <dc:date>2016-07-08T01:43:18Z</dc:date>
    </item>
    <item>
      <title>Hi Mike,</title>
      <link>https://community.intel.com/t5/Intel-Integrated-Performance/using-ippiAlphaComp-with-separate-RGB-and-A-buffers/m-p/1120701#M25568</link>
      <description>&lt;P&gt;Hi Mike,&lt;/P&gt;

&lt;P&gt;You should use&lt;/P&gt;

&lt;P&gt;IPPAPI( IppStatus, ippiCopy_8u_C1C4R,&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ( const Ipp8u* pSrc, int srcStep,&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Ipp8u* pDst, int dstStep, IppiSize roiSize ))&lt;BR /&gt;
	function - shift pDst pointer to A-channel position and use your A-array as pSrc&lt;/P&gt;

&lt;P&gt;regards, Igor&lt;/P&gt;</description>
      <pubDate>Fri, 15 Jul 2016 09:47:47 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Integrated-Performance/using-ippiAlphaComp-with-separate-RGB-and-A-buffers/m-p/1120701#M25568</guid>
      <dc:creator>Igor_A_Intel</dc:creator>
      <dc:date>2016-07-15T09:47:47Z</dc:date>
    </item>
  </channel>
</rss>

