开发者

Saving an image of what a device context drew, wxPython

开发者 https://www.devze.com 2022-12-19 16:12 出处:网络
I need to be able to save an image (format doesn\'t matter) of the state of the device context canvas. I tried dc.GetA开发者_开发百科sBitmap but it returns invalid bitmaps. How can I do it?I believe t

I need to be able to save an image (format doesn't matter) of the state of the device context canvas. I tried dc.GetA开发者_开发百科sBitmap but it returns invalid bitmaps. How can I do it?


I believe this should do the trick:

def saveSnapshot(dcSource):
    # based largely on code posted to wxpython-users by Andrea Gavana 2006-11-08
    size = dcSource.Size

    # Create a Bitmap that will later on hold the screenshot image
    # Note that the Bitmap must have a size big enough to hold the screenshot
    # -1 means using the current default colour depth
    bmp = wx.EmptyBitmap(size.width, size.height)

    # Create a memory DC that will be used for actually taking the screenshot
    memDC = wx.MemoryDC()

    # Tell the memory DC to use our Bitmap
    # all drawing action on the memory DC will go to the Bitmap now
    memDC.SelectObject(bmp)

    # Blit (in this case copy) the actual screen on the memory DC
    # and thus the Bitmap
    memDC.Blit( 0, # Copy to this X coordinate
        0, # Copy to this Y coordinate
        size.width, # Copy this width
        size.height, # Copy this height
        dcSource, # From where do we copy?
        0, # What's the X offset in the original DC?
        0  # What's the Y offset in the original DC?
        )

    # Select the Bitmap out of the memory DC by selecting a new
    # uninitialized Bitmap
    memDC.SelectObject(wx.NullBitmap)

    img = bmp.ConvertToImage()
    img.SaveFile('saved.png', wx.BITMAP_TYPE_PNG)

(I'd just include a link to the original but couldn't find it quickly.)


Yo can probably figure something out of this (working with images and wxPython)

0

精彩评论

暂无评论...
验证码 换一张
取 消