要在 python 调用 C# 的库,心态爆炸
我无法在python中导入 System.Drawing 包,这里测试使用的 Bitmap对象来自于其他 DLL 返回。
pythonnet 版本为 2022年的预发行版 3.0.0a2
import pythonnet
import clr
from System.IO import SeekOrigin
from System.IO import MemoryStream
from System.Collections import *
# 主要函数,使用 MemoryStream做中转,把图像数据变成字节数组。
def bitmap2bytes(bitmap):
stream = MemoryStream()
bitmap.Save(stream, bitmap.RawFormat.Png)
stream.Seek(0, SeekOrigin.Begin)
data = bytes(stream.ToArray())
return data
# Bitmap 对象来自某DLL的返回。我无法在导入 System.Drawing 的包来得到一个Bitmap对象做实验,所以这里仅做示例。
# bmp = Bitmap()
# xxx_mod.GetImage 为任意一个 C# 模块的能返回Bitmap对象的方法
bmp = xxx_mod.GetImage()
data = bitmap2bytes(bmp)
# 得到python字节对象,可以用cv2.imdecode来解码或直接写入到文件
print(len(data))
print(data)
open('a.png', 'wb').write(data)