Обработка растрового изображения в успокоительном API c# - PullRequest
0 голосов
/ 13 марта 2020

У меня есть растровое изображение, в котором мой нижеприведенный код возвращает позиции / координаты точек на изображении следующим образом:

public static void Main()
    {
        var resource = Assembly.GetExecutingAssembly().GetManifestResourceStream("test.png");

        byte[] buffer = new byte[resource.Length];
        resource.Read(buffer, 0, buffer.Length);

        var positions = GetCoordinates(buffer);    
    }

    public static List<Tuple<int, int>> GetCoordinates(byte[] imgData)
    {
        int HEIGHT = 400;
        int WIDTH = 600;

        List<Tuple<int, int>> positions = new List<Tuple<int, int>>();
        Bitmap bitmap;
        using (Stream bmpStream = new MemoryStream(imgData))
        {
            Image image = Image.FromStream(bmpStream);
            bitmap = new Bitmap(image);
        }

        List<int> knownBlankColors = new List<int>();
        knownBlankColors.Add(Color.White.ToArgb());

        for (int x = 0; x < HEIGHT; x++)
        {
            for (int y = 0; y < WIDTH; y++)
            {
                Color pixelColor = bitmap.GetPixel(x, y);

                var code = pixelColor.ToArgb();

                if (!knownBlankColors.Contains(code))
                    positions.Add(new Tuple<int, int>(x, y));       
            }  
        }
        return positions;
    }

это работает хорошо и дает следующие позиции

(114, 33) (114, 34) (114, 35) (114, 36) (114, 37) et c et c

Теперь мой вопрос Я пытаюсь преобразовать вышеуказанный процесс в успокоительный API, чтобы изображение передавалось через почтальона. Это то, что я пытался

 [Route("api/[controller]")]
[ApiController]
public class ProcessImageController : ControllerBase
{
    public static IWebHostEnvironment _environment;
    public ProcessImageController(IWebHostEnvironment environment)
    {
        _environment = environment;
    }

    public class FileUploadApi
    {
        public IFormFile images { get; set; }
    }
    [HttpPost]
    public async Task<string> Post([FromForm]FileUploadApi objImages)
    {
        try
        {               
                byte[] buffer = new byte[objImages.images.Length];                 
                var positions = GetCoordinates(buffer);
                return positions.ToString();

        }
        catch (Exception ex)
        {
            return ex.Message.ToString();
        }
    }
    public static List<Tuple<int, int>> GetCoordinates(byte[] imgData)
    {
        int HEIGHT = 400;
        int WIDTH = 600;

        List<Tuple<int, int>> positions = new List<Tuple<int, int>>();
        Bitmap bitmap;
        using (Stream bmpStream = new MemoryStream(imgData))
        {
            Image image = Image.FromStream(bmpStream);
            bitmap = new Bitmap(image);
        }

        List<int> knownBlankColors = new List<int>();
        knownBlankColors.Add(Color.White.ToArgb());

        for (int x = 0; x < HEIGHT; x++)
        {
            for (int y = 0; y < WIDTH; y++)
            {
                Color pixelColor = bitmap.GetPixel(x, y);

                var code = pixelColor.ToArgb();

                if (!knownBlankColors.Contains(code))
                    positions.Add(new Tuple<int, int>(x, y));


            }

        }

        return positions;
    }
}

Это правильный способ сделать это? когда я пытаюсь передать изображение от почтальона, он говорит неверный параметр. что я делаю не так?

...