9

ピクセルで動作する関数があります。RGB 値で 1 つのリストを作成したいのですが、次のように宣言すると:

List<int[]> maskPixels = new List<int[3]>();

エラーが発生します:

配列サイズは変数宣言で指定できません ('new' 式で初期化してみてください)

ピクセルの追加は次のように行います。maskPixels.Add(new int[] { Red, Green, Blue });

これを行う方法はありますか、new List<int[]>();代わりに使用する必要がありますか?

4

5 に答える 5

8

Color同様のことを行う方法はありませんが、これを RGB 値に使用しているので、代わりにクラスを使用しないのはなぜですか?

List<Color> maskPixels = new List<Color>();

そして、次のように各色を初期化します。

Color c = Color.FromArgb(R,G,B); //assuming R,G,B are int values 

値が 0 ~ 255 の範囲にある場合、これが最も自然な保存方法です。各色コンポーネントを取得するために、事前定義されたゲッターとセッターがあります。

于 2013-06-10T13:28:03.690 に答える
6

それは可能ではありません。ちょっと考えてみてください。ジェネリック型がある場合、たとえばList<T>T型パラメーターであり、ジェネリック型の特定のインスタンスについては、 type を入力しTます。

でもタイプint[3]じゃない!正確には、これarray-creation-expressionは C# の文法にあります。

値を 3 つしか保持できないタイプに制限したい場合は、最初のカットとして提案してもTuple<int, int, int>よろしいですか? しかし、さらに良いことに、 (use )のような RGBを表す専用の型、または必要に応じて独自のカスタム型をお勧めします。私が後者に傾倒する理由は、すべてが RGB の有効な表現であるとは限らないからです!System.Drawing.ColorColor.FromArgb(int, int, int)Tuple<int, int, int>

于 2013-06-10T13:30:13.763 に答える
5

このように配列の初期化を行うことはできません。さらに、それぞれint[]が技術的に異なるサイズになる可能性があります。別のデータ構造はList<Tuple<int, int, int>>どうですか?

これにより、リストに 3 つの整数値を厳密に含めることができます。これは、プロパティを持つ明確に定義された構造であるため、配列よりも高速に LINQ を介して検索できます。

于 2013-06-10T13:24:57.887 に答える
5

これには独自の値タイプを用意することをお勧めします。

public struct Rgb
{
    int R,
    int G,
    int B
}

List<Rgb> list = new List<Rgb>;
于 2013-06-10T13:27:23.007 に答える
-1
 [Flags]
    public enum RGB
    {
        R,
        G,
        B
    }

...

public List<RGB> l = new List<RGB>();
l.Add(RGB.r | RGB.G)
于 2013-06-10T14:22:34.893 に答える