After looking through the source code it looks like there is not a way to directly access the raw bitmap. However, you can get an encoded copy.
First, get its encoded representation.
bitmap_encoded = bitmap_object.to_string()
This is encoded as "b", followed by the width, comma, height, comma, and a base64 encoding of zlib compressed raw bytes. Parse the encoded data:
import base64
import zlib
# b3840,1080,eNrsf...H1ooKAs=
# ^ ^
first_comma = bitmap_encoded.find(',')
second_comma = bitmap_encoded.find(',', first_comma + 1)
# b3840,1080,eNrsf...H1ooKAs=
# ^ ^
width = int(bitmap_encoded[1:first_comma])
# b3840,1080,eNrsf...H1ooKAs=
# ^ ^
height = int(bitmap_encoded[first_comma+1:second_comma])
# b3840,1080,eNrsf...H1ooKAs=
# ^
bitmap_bytes = zlib.decompress(base64.b64decode(bitmap_encoded[second_comma+1:]))
When I tested this on my machine, the red and blue channels were backwards so I'm assuming the bitmap from autopy is RGB encoded instead of the typical BGR encoding that BMP files use which is what PIL expects. Finally, load the image with PIL:
img = PIL.Image.frombytes('RGB', (width, height), bitmap_bytes, 'raw', 'BGR', 0, 1)
To load the image normally without swapping the red and blue channels, do:
img = PIL.Image.frombytes('RGB', (width, height), bitmap_bytes)