Вызов python скрипта из c# с изображениями в качестве аргументов - PullRequest
0 голосов
/ 28 мая 2020

У меня есть приложение c#, в котором есть растровый объект. Я хочу sh вызвать сценарий python и отправить ему растровое изображение. Идея состоит в том, чтобы не сохранять растровое изображение на жестком диске, потому что это замедлит работу приложения. Я использую sh, чтобы напрямую использовать память приложения.

У вас есть идея, как я могу это сделать?

Спасибо :)

Ответы [ 2 ]

1 голос
/ 28 мая 2020

Напишите программу python для чтения растрового изображения из стандартного ввода

import sys
bitmap = sys.stdin.read()

Попросите программу C# выполнить программу с stdin, установленным в канал, записать растровое изображение и затем закрыть канал .

0 голосов
/ 28 мая 2020

Решение основано на идее тделаней. Я использую стандартный ввод / вывод для связи.

C#

        Bitmap bitmap = new Bitmap(@"test.jpg");

        Process p = new Process();
        p.StartInfo.UseShellExecute = false;
        p.StartInfo.RedirectStandardOutput = true;
        p.StartInfo.FileName = @"c:\Python30\python.exe";
        p.StartInfo.Arguments = string.Format("{0} {1}", "test.py", "");
        p.StartInfo.RedirectStandardInput = true;
        p.Start();

        using (var memoryStream = new MemoryStream())
        {
            bitmap.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Jpeg);
            var bytes = memoryStream.ToArray();
            memoryStream.Seek(0, SeekOrigin.Begin);
            p.StandardInput.BaseStream.Write(bytes, 0, bytes.Length);
            p.StandardInput.BaseStream.Flush();
            p.StandardInput.BaseStream.Close();
        }

        string output = p.StandardOutput.ReadToEnd();
        p.WaitForExit();

Python:

import sys
import msvcrt
import os

msvcrt.setmode (sys.stdin.fileno(), os.O_BINARY)
bitmap = sys.stdin.buffer.read()

output = open("/tmp/testpython.jpg","wb")
output.write(bitmap)
output.close()

print("hehe")

exit(0)
...