0

我有一个位图,其中我的波纹管代码返回图像中点的位置/坐标,如下所示:

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) 等等

现在我的问题是我正在尝试将上述过程转换为一个宁静的 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;
    }
}

这是正确的做法吗?当我尝试从邮递员传递图像时,它说参数无效。我究竟做错了什么?

4

0 回答 0