I come across the following cairo code, I appreciate if someone can help me understand them:<br><br>1. Why pass tmpBuf.get()&nbsp; to cairo_image_surface_create_for_data()?<br>2. What is the purpose of cairo_set_source_surface() and later with cairo_paint_with_alpha() with the parameter mCairo? 
<br>3. What does it save to the file? the data in tmpBuf? or mCairo? <br><br>&nbsp;&nbsp; // Create a temporary surface to hold the full-size image in cairo<br>&nbsp;&nbsp;&nbsp; // image format.<br>&nbsp;&nbsp;&nbsp; nsAutoArrayPtr&lt;PRUint8&gt; tmpBuf(new PRUint8[
aSurfaceSize.width*aSurfaceSize.height*4]);<br><br>&nbsp;cairo_surface_t *tmpSurf =<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cairo_image_surface_create_for_data(tmpBuf.get(),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CAIRO_FORMAT_ARGB32, aSurfaceSize.width
, aSurfaceSize.height,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; aSurfaceSize.width*4);&nbsp; <br><br>&nbsp; &nbsp; cairo_set_source_surface(mCairo, tmpSurf, 0, 0);<br>&nbsp;&nbsp;&nbsp; cairo_paint_with_alpha(mCairo, mGlobalAlpha);<br><br>&nbsp;&nbsp;&nbsp; cairo_surface_write_to_png(tmpSurf, &quot;
my.png&quot;);<br><br>Thank you.<br>