Image 数据,在C#里面的相互转化

1.

image(这里是Bitmap) 转变成 MemoryStream

Bitmap b = new Bitmap(Server.MapPath(ppath));//Server.MapPath 与*.config文件在同一目录下
Stream ms = new MemoryStream();
b.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
MemoryStream 转变成 image(这里是Bitmap)

MemoryStream ms = new MemoryStream(Bytes);
Bitmap b = Bitmap.FromStream(ms,true);
2.

MermoryStream 转成 Byte[]

byte[] bytes = new byte[stream.Length];
stream.Read(bytes, 0, bytes.Length);
// 设置当前流的位置为流的开始
stream.Seek(0, SeekOrigin.Begin);

Byte[] 转成 MermoryStream

Stream stream = new MemoryStream(bytes);
3.
 Byte[] 转为 String , string 转为 Byte[]

System.Text.UnicodeEncoding converter = new System.Text.UnicodeEncoding();
byte[] inputBytes =converter.GetBytes(inputString);
string inputString = converter.GetString(inputBytes);
4.

MermorySream 转成 文件

public void StreamToFile(Stream stream,string fileName)
{
    // 把 Stream 转换成 byte[]
    byte[] bytes = new byte[stream.Length];
    stream.Read(bytes, 0, bytes.Length);
    // 设置当前流的位置为流的开始
    stream.Seek(0, SeekOrigin.Begin);
    // 把 byte[] 写入文件
    FileStream fs = new FileStream(fileName, FileMode.Create);
    BinaryWriter bw = new BinaryWriter(fs);
    bw.Write(bytes);
    bw.Close();
    fs.Close();
}


文件 转成  MeroryStream 


public Stream FileToStream(string fileName)
{            
    // 打开文件
    FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read);
    // 读取文件的 byte[]
    byte[] bytes = new byte[fileStream.Length];
    fileStream.Read(bytes, 0, bytes.Length);
    fileStream.Close();
    // 把 byte[] 转换成 Stream
    Stream stream = new MemoryStream(bytes);
    return stream;
 
 
}



### C# 和 Python 联合编程的方法及应用场景 #### 方法概述 为了实现C#和Python的联合编程,通常采用的方式是在C#环境中通过特定接口调用Python脚本或库。这种方式允许开发者利用两种语言的优势,在保持高效性能的同时简化复杂逻辑处理[^2]。 #### 实现方式 一种常见的做法是借助于`Python.NET`这一桥梁工具来完成跨平台交互操作。具体来说: - **安装依赖**:确保已安装最新版本的Python以及对应的Python.NET包。 - **加载解释器**:在C#端初始化并启动嵌入式的Python运行环境。 - **执行代码片段**:可以直接执行简单的Python表达式或是导入预先准备好的.py文件作为模块使用。 - **数据交换机制**:支持基本类型的相互转化外加更复杂的对象结构映射;对于二进制流(如图片),则可通过字节数组形式传输。 ```csharp using System; using Python.Runtime; class Program { static void Main() { using (Py.GIL()) { // 获取全局锁以进入Python上下文 dynamic np = Py.Import("numpy"); // 导入库 Console.WriteLine(np.cos(np.pi * 2)); // 执行计算 double c = np.cos(2); Console.WriteLine(c); // 输出结果 var system = Py.Import("sys"); system.path.Append(@".\Scripts"); // 添加自定义路径到搜索列表中去寻找额外资源 } } } ``` #### 应用场景实例 当涉及到机器学习领域时,比如图像识别任务里,如果前端界面由C#构建而成而核心算法部分基于Python框架(PaddlePaddle等),那么就可以按照上述流程建立起两者间的联系,从而实现在不改变原有架构的基础上引入先进的AI能力。 #### 数据传递示例 针对图像这种特殊的数据类型,可以通过将其编码成Base64字符串或者其他适合的形式传送给对方再解码还原出来继续后续工作。这里给出一段关于如何把Bitmap转为byte[]进而交给Python侧的例子: ```csharp // 将位图转换为字节序列以便发送至Python public byte[] BitmapToBytes(System.Drawing.Bitmap bitmap){ using(var ms = new MemoryStream()){ bitmap.Save(ms, ImageFormat.Png); return ms.ToArray(); } } // 接收来自Python的结果并将之解析回位图展示 private void ShowResult(byte[] imgData){ using(MemoryStream stream=new MemoryStream(imgData)){ pictureBox.Image=System.Drawing.Image.FromStream(stream); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值