簡體   English   中英

指定所有固定參數后,必須出現命名參數規范

[英]Named argument specifications must appear after all fixed arguments have been specified

我正在使用C#進行圖像處理,但有兩個主要錯誤:

  1. 錯誤:指定所有固定參數后,必須出現命名參數規范
  2. 錯誤:System.Drawing.Size是一個“類型”,但是卻像一個“變量”一樣使用

這是我的代碼:

using System;

using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Emgu.CV;
using Emgu.CV.Structure;
using Emgu.Util;
using Emgu.CV.CvEnum;
using Emgu.CV.GPU;
using Emgu.CV.UI;


namespace SNAKE_C_Sharp
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void imageBox1_Click(object sender, EventArgs e)
        {

         }

        private void Form1_Load(object sender, EventArgs e)
        {

       }

        private void button1_Click(object sender, EventArgs e)
        {
           using (OpenFileDialog dialog = new OpenFileDialog())
        {
                dialog.Filter =  "(*.*)|*.*";
                if (dialog.ShowDialog() == DialogResult.OK)
                {
                   pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
                   Image image = Image.FromFile(dialog.FileName);

                    pictureBox1.Image = image;

               }
           }

       }

       private void button2_Click(object sender, EventArgs e)
       {
           this.Close();

        }
       struct parameter
       {
           public double alpha { get; set; }
           public double beta { get; set; }
           public double gamma { get; set; }
       };
       unsafe private void button3_Click(object sender, EventArgs e)
       {
        {

                int length = 1000;
                MCvPoint2D64f* contour;

                MCvPoint2D64f center = new MCvPoint2D64f();
                var snake_param = new List<parameter>();
                snake_param.Add(new parameter { alpha = 0.1, beta = 0.1, gamma = 0.1,          });
                //Image src_img = pictureBox1.Image;
                IntPtr dst_img = new IntPtr();
                //IntPtr src_img = Emgu.CV.CvInvoke.cvLoadImage("pictureBox1.Image",     Emgu.CV.CvEnum.LOAD_IMAGE_TYPE.CV_LOAD_IMAGE_COLOR);
                Bitmap bitmapp = new Bitmap("pictureBox1.Image");

                Image<Bgr, byte> image = new Image<Bgr, byte>(bitmapp);




                center.x = image.Width;
                center.y = image.Height;




                int i;
                for (i = 0; i < length; i++)
                {
                    contour[i].x = (int)(center.x * Math.Cos(2 * Math.PI * i / length) + center.x);
                    contour[i].y = (int)(center.y * Math.Sin(2 * Math.PI * i / length) + center.y);
            }




               for (i = 0; i < length - 1; i++)
                {
                CvInvoke.cvLine(dst_img, contour[i], contour[i + 1], new MCvScalar(255, 0, 0), 2, lineType: LINE_TYPE.EIGHT_CONNECTED,0);
            }


                CvInvoke.cvLine(dst_img, contour[length - 1], contour[0], new   MCvScalar(255, 0, 0), 2, lineType: LINE_TYPE.EIGHT_CONNECTED, 0);




                IntPtr src_img = image.Ptr;

                CvInvoke.cvSnakeImage(src_img, contour, length, snake_param[1].alpha,   snake_param[2].beta, snake_param[3].gamma, 1.0f, contour[i], System.Drawing.Size(15, 15),   new MCvTermCriteria(1, 0.0), true);

                CvInvoke.cvCvtColor(src_img, dst_img, COLOR_CONVERSION.GRAY2RGB);


                for (i = 0; i < length - 1; i++)
                {
                    CvInvoke.cvLine(dst_img, contour[i], contour[i + 1], new MCvScalar(255, 0, 0), 2, lineType: LINE_TYPE.EIGHT_CONNECTED, 0);
                }
                CvInvoke.cvLine(dst_img, contour[length - 1], contour[0], new MCvScalar(255, 0, 0), 2, lineType: LINE_TYPE.EIGHT_CONNECTED, 0);
                pictureBox2.SizeMode = PictureBoxSizeMode.StretchImage;

                Bitmap bitmappbb = new Bitmap("dst_img");
                Image<Bgr, byte> imagee = new Image<Bgr, byte>(bitmapp);
                pictureBox2.Image = bitmappbb;
           }

        }

         private void imageBox1_Click_1(object sender, EventArgs e)
        {

        }

         private void panAndZoomPictureBox1_Click(object sender, EventArgs e)
        {

        }

        private void imageBox1_Click_2(object sender, EventArgs e)
        {

        }


    }
}    

我該如何調整以上錯誤?

這是導致錯誤1的問題之一

CvInvoke.cvLine(dst_img, contour[i], contour[i + 1], new MCvScalar(255, 0, 0), 2, lineType: LINE_TYPE.EIGHT_CONNECTED,0);

我將使其更具可讀性...

CvInvoke.cvLine(
    dst_img, 
    contour[i], 
    contour[i + 1], 
    new MCvScalar(255, 0, 0), 
    2, 
    lineType: LINE_TYPE.EIGHT_CONNECTED,
    0
);

看到倒數第二行使用的是命名參數( lineType: ,但是后面跟着一個非命名參數? 編譯器如何理解您的意思?

第二個錯誤是如@LajosArpad所述,您需要在使用System.Drawing.Size(..)添加一個new錯誤。

代替

CvInvoke.cvSnakeImage(src_img, contour, length, snake_param[1].alpha,   snake_param[2].beta, snake_param[3].gamma, 1.0f, contour[i], System.Drawing.Size(15, 15),   new MCvTermCriteria(1, 0.0), true);

你需要這個:

CvInvoke.cvSnakeImage(src_img, contour, length, snake_param[1].alpha,   snake_param[2].beta, snake_param[3].gamma, 1.0f, contour[i], new System.Drawing.Size(15, 15),   new MCvTermCriteria(1, 0.0), true);

這應該解決第二個錯誤。 如果沒有new關鍵字,則沒有System.Drawing.Size實例。

編輯:

我不會測試您的代碼,也不會逐行閱讀代碼,因此,我希望獲得有關您的第一個錯誤的更多信息,以便為您提供解決方案。 您能告訴我拋出異常的那一行嗎?

另外,也許我建議您應該更加注意代碼列表,因為如果您以這種非結構化的方式編寫代碼,將很難閱讀。 閱讀不是不可能,但是我們大多數人(包括我自己)都不會閱讀。

我修復了最后一個錯誤,這就是我的新代碼:

    public partial class Form1 : Form
   {
       public Form1()
       {
        InitializeComponent();
         }

        private void button1_Click(object sender, System.EventArgs e)
        {
        using (OpenFileDialog dialog = new OpenFileDialog())
        {
            dialog.Filter = "JPEG|*.jpg|PNG|*.PNG";
            if (dialog.ShowDialog() == DialogResult.OK)
            {
                pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;

                Image image = Image.FromFile(dialog.FileName);

                pictureBox1.Image = image;

            }
        }

    }

    private void button2_Click(object sender, EventArgs e)
    {
        this.Close();
    }


    private void Form1_Load(object sender, EventArgs e)
    {

    }
    struct parameter
    {
        public float alpha { get; set; }
        public float beta { get; set; }
        public float gamma { get; set; }
    };




    unsafe private void button3_Click(object sender, EventArgs e)
    {
        {

        int length = 1000;

        Point *contour;

        Point center = new Point();

        var snake_param = new List<parameter>();

            snake_param.Add(new parameter { alpha=  0.1f , beta = 0.1f, gamma= 0.1f, });

        IntPtr dst_img= new IntPtr();

        Bitmap bitmap = new Bitmap("pictureBox1.Image");

        Image<Bgr, byte> image = new Image<Bgr, byte>(bitmap);




        center.X = image.Width;
        center.Y = image.Height;




        int i;
        for (i = 0; i < length; i++)
        {
            contour[i].X = (int)(center.X * Math.Cos(2 * Math.PI * i / length) + center.X);
            contour[i].Y = (int)(center.Y * Math.Sin(2 * Math.PI * i / length) + center.Y);
        }

     LINE_TYPE lignetype = new LINE_TYPE();         


        for (i = 0; i < length - 1; i++)
        {
            CvInvoke.cvLine(
                dst_img,
                contour[i],
                contour[i + 1],
                new MCvScalar(255,0,0),
                2, 
                LINE_TYPE.EIGHT_CONNECTED,
                0  );
        }


        CvInvoke.cvLine
            (
            dst_img,
            contour[length - 1],
            contour[0],
            new MCvScalar(255,0,0),
            2,
            LINE_TYPE.EIGHT_CONNECTED,
            0
            );


           IntPtr ctr =new IntPtr();
           //public void PixelToInkSpace(
            //IntPtr a 
            //ref Point contour
            //);          



        IntPtr src_img = image.Ptr;
        CvInvoke.cvSnakeImage(
            src_img,
            contour[i],
            length, 
            snake_param.[1].alfa,
            snake_param[2].beta,
            snake_param[3].gamma,
            1,
            new System.Drawing.Size(15, 15), 
            new MCvTermCriteria(1,0.0),
            1);



        CvInvoke.cvCvtColor(
            src_img,
            dst_img,
            COLOR_CONVERSION.GRAY2RGB );


            for (i = 0; i < length - 1; i++)
        {
            CvInvoke.cvLine(
                dst_img,
                contour[i],
                contour[i + 1],
                new MCvScalar(255,0,0),
                2, 
                LINE_TYPE.EIGHT_CONNECTED,
                0 );
        }
            CvInvoke.cvLine(
                dst_img, 
                contour[length - 1],
                contour[0], 
                new MCvScalar(255,0,0),
                    2, 
                    LINE_TYPE.EIGHT_CONNECTED,
                    0);
             pictureBox2.SizeMode = PictureBoxSizeMode.StretchImage;

             Bitmap bitmappbb = new Bitmap("dst_img");
             Image<Bgr, byte> imagee = new Image<Bgr, byte>(bitmappbb);
             pictureBox2.Image = bitmappbb;
             }


          }
       }
   }

但是現在我的錯誤有所不同,因為我將代碼從c ++轉換為c#,我發現蛇格式是

public static void cvSnakeImage(
IntPtr image,
IntPtr points,
int length,
float[] alpha,
float[] beta,
float[] gamma,
int coeffUsage,
Size win,
MCvTermCriteria criteria,
bool calcGradient

  1. 我沒有找到將類型為“ Point”的變量“ contour”轉換為“ IntPtr”的方法。
  2. 還有一種將alfa,beta和gamma稱為float []的方法; @蒂莫西·沃爾特斯

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM