This time, I wrote my code like this:<div><blockquote class="gmail_quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; ">
<blockquote class="gmail_quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; ">
    def video_observer(self, f):</blockquote><blockquote class="gmail_quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; ">
        img = Image.frombuffer(&#39;RGB&#39;, (self._width, self._height), f.data, \</blockquote><blockquote class="gmail_quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; ">
                               &#39;raw&#39;, &#39;RGB&#39;, 0, 1)</blockquote><blockquote class="gmail_quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; ">
<br></blockquote><blockquote class="gmail_quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; ">
        img = img.resize((self.nwidth, self.nheight))</blockquote><blockquote class="gmail_quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; ">
        img.save(&#39;%d.jpg&#39; % self.cnt, &#39;JPEG&#39;) # debug! :-P</blockquote><blockquote class="gmail_quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; ">
        </blockquote><blockquote class="gmail_quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; ">
        imgd = img.tostring(&#39;raw&#39;, &#39;RGBA&#39;, 0, 1)</blockquote><blockquote class="gmail_quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; ">
        a = array.array(&#39;B&#39;, imgd)</blockquote><blockquote class="gmail_quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; ">
<br></blockquote><blockquote class="gmail_quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; ">
        surface = cairo.ImageSurface.create_for_data(a, cairo.FORMAT_ARGB32, \</blockquote><blockquote class="gmail_quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; ">
            self.nwidth, self.nheight, self.nwidth * 4) # self.nwidth * 4</blockquote><blockquote class="gmail_quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; ">
<br></blockquote><blockquote class="gmail_quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; ">
        surface.write_to_png(&#39;%d.png&#39; % self.cnt)</blockquote><blockquote class="gmail_quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; ">
<br></blockquote><blockquote class="gmail_quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; ">
        self.context.set_source_surface(surface, 0, 0)</blockquote><blockquote class="gmail_quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; ">
        self.context.paint()</blockquote></blockquote><div> </div><div>But...</div><blockquote class="gmail_quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; ">
  File &quot;main.py&quot;, line 98, in video_observer</blockquote><blockquote class="gmail_quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; ">
    imgd = img.tostring(&#39;raw&#39;, &#39;RGBA&#39;, 0, 1)</blockquote><blockquote class="gmail_quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; ">
  File &quot;/usr/lib/python2.6/dist-packages/PIL/Image.py&quot;, line 535, in tostring</blockquote><blockquote class="gmail_quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; ">
    e = _getencoder(self.mode, encoder_name, args)</blockquote><blockquote class="gmail_quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; ">
  File &quot;/usr/lib/python2.6/dist-packages/PIL/Image.py&quot;, line 399, in _getencoder</blockquote><blockquote class="gmail_quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; ">
    return apply(encoder, (mode,) + args + extra)</blockquote><blockquote class="gmail_quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; ">
SystemError: unknown raw mode</blockquote><div><br></div><div><br><div class="gmail_quote">On Sun, Jan 9, 2011 at 2:37 AM, Andrea Canciani <span dir="ltr">&lt;<a href="mailto:ranma42@gmail.com">ranma42@gmail.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div><div></div><div class="h5">On Sat, Jan 8, 2011 at 5:09 PM, wecing &lt;<a href="mailto:w3cing@gmail.com">w3cing@gmail.com</a>&gt; wrote:<br>

&gt; Currently i&#39;m writing a video player which uses cairo to draw subtitle on<br>
&gt; each frame.<br>
&gt; I successfully extracted all the frames as PIL Image objects, but I failed<br>
&gt; to create cairo surfaces with that.<br>
&gt; I refered to <a href="http://cairographics.org/pythoncairopil/" target="_blank">http://cairographics.org/pythoncairopil/</a> , but it seems that<br>
&gt; maybe there&#39;re some problems in the document.<br>
&gt; Here is the traceback:<br>
&gt;   File &quot;main.py&quot;, line 96, in video_observer<br>
&gt;     img.get_data(), &#39;raw&#39;, &#39;RGBA&#39;, 0, 1)<br>
&gt;   File &quot;/usr/lib/python2.6/dist-packages/PIL/Image.py&quot;, line 512, in<br>
&gt; __getattr__<br>
&gt;     raise AttributeError(name)<br>
&gt; AttributeError: get_data<br>
<br>
</div></div>It looks like you&#39;re trying to use the get_data() member of a PIL<br>
image (but it doesn&#39;t exist). get_data() is a member of cairo images,<br>
but to access PIL images raw data you might need something like:<br>
<br>
    data = pil_image.tostring(&quot;raw&quot;,&quot;RGBA&quot;,0,1)<br>
<br>
or (if the format is already correct), just:<br>
<br>
    data = pil_image.getdata() # (no underscore between &quot;get&quot; and &quot;data&quot;).<br>
<br>
See <a href="http://www.pythonware.com/library/pil/handbook/image.htm" target="_blank">http://www.pythonware.com/library/pil/handbook/image.htm</a> and<br>
<a href="http://cairographics.org/documentation/pycairo/2/reference/surfaces.html#class-imagesurface-surface" target="_blank">http://cairographics.org/documentation/pycairo/2/reference/surfaces.html#class-imagesurface-surface</a><br>

for reference.<br>
<font color="#888888"><br>
Andrea<br>
</font></blockquote></div><br></div></div>