windows 将python字节与winrt一起使用

k10s72fa  于 2022-11-26  发布在  Windows
关注(0)|答案(1)|浏览(160)

我尝试使用winrt包中的BitmapDecoder,其中包含我从python文件中读取的字节。
如果我使用winrt从文件中读取字节,我可以做到这一点:

import os 

from winrt.windows.storage import StorageFile, FileAccessMode
from winrt.windows.graphics.imaging import BitmapDecoder

async def process_image(path):
    # get image from disk
    file = await StorageFile.get_file_from_path_async(os.fspath(path))
    stream = await file.open_async(FileAccessMode.READ)
    decoder = await BitmapDecoder.create_async(stream)
    return await decoder.get_software_bitmap_async()

问题是,我真的想在将字节发送到BitmapDecoder之前使用python-land中的字节,而不是使用StorageFile获取它们。
浏览MS文档,我看到有一个InMemoryRandomAccessStream,听起来像我想要的,但我似乎不能让它工作。我尝试了这个:

from winrt.windows.storage.streams import InMemoryRandomAccessStream, DataWriter
stream = InMemoryRandomAccessStream()
writer = DataWriter(stream)
await writer.write_bytes(bytes_)

这样就得到了await writer.write_bytes(bytes_)行的RuntimeError: The parameter is incorrect.
不确定下一步该怎么做。

mi7gmzs6

mi7gmzs61#

要使用python字节,请执行以下操作。关键字是writer.write_bytes不是异步的,并且调用writer.store_async()

async def process_image(bytes_):
    stream = InMemoryRandomAccessStream()
    writer = DataWriter(stream)
    writer.write_bytes(bytes_)
    writer.store_async()
    stream.seek(0)

    decoder = await BitmapDecoder.create_async(stream)
    return await decoder.get_software_bitmap_async()

相关问题