From: John H. <jdh...@ac...> - 2004-12-22 17:28:05
|
>>>>> "Chris" == Chris Barker <Chr...@no...> writes: Chris> This trick here is that the binary format of a wxBitmap is Chris> both platform and instance dependent. The idea, as I Chris> understand it, is that a wxBitmap has the same binary Chris> format as is needed for the current display, so each Chris> platform is different, and it can also be different Chris> depending on the depth of the display. Given all this, I Chris> doubt you're going to be able to improve on the wx supplied Chris> methods for converting from a wxImage to a wxBitmap. (and Chris> if you do, contribute it to wx!) But this might helpful - if we can detect what kind of binary format wx is using, we can ask agg to convert itself to this format in a python buffer object and pass this on directly to the wxBitmap. Agg has efficient conversion routines from just about any pixel format to any other. This would avoid one copy, because we could do (making up the syntax for copying a buffer into the bitmap FigureCanvasAgg.draw(self) if display_format=='ZZZ': # made up pixel format buffer = self.to_zzz() self.bitmap.UpdateFromBuffer(buffer) # made up method else: # fall back on old method s = self.tostring_rgb() w = int(self.renderer.width) h = int(self.renderer.height) image = wxEmptyImage(w,h) image.SetData(s) self.bitmap = image.ConvertToBitmap() self.gui_repaint() If we could handle the most common cases, it would be a win for most users. Any idea how to query the pixel format of the wx display? Chris> Does the Agg backend use a binary format compatible with Chris> wxImage? If not, that means there are two conversions Chris> required, which might be the source of the slowdown. agg uses an array of unsigned chars r0, b0, g0, a0, r1, b1, g1, a1, ... What does wxImage use? JDH |