第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C# 將矩陣劃分為子塊

C# 將矩陣劃分為子塊

C#
慕碼人2483693 2021-12-25 16:41:08
我有一個來自 1600x1600 圖像的矩陣?,F(xiàn)在我需要將此矩陣分配到 4x4 塊中。舉個例子:              00 01 02 03      IMAGE = 04 05 06 07        BLOCK(i) =   00 01       BLOCK(i+1) = 02 03              08 09 0A 0B                     04 05                    06 07              0C 0D 0E 0F                                BLOCK(i+2) = 08 09        BLOCK(i+3) = 0A 0B                                             0C 0D                   = 0E 0F1 ) 首先我不知道圖像尺寸,用戶打開它。我后來明白了。我的測試圖像 1600x1600.但塊尺寸固定為 4x4。并且圖像尺寸是 ,讓我們同意現(xiàn)在可以用 4 分...2 ) 我不知道會有多少塊。3)我需要稍后訪問塊的行和coloumb,因為我稍后將對塊執(zhí)行數(shù)學運算......例如,與塊(n)[x,y]與塊(n + 1)的異或運算[x,y]。所以這個decleration部分,這部分程序是非常非常重要的。我把這部分程序堅持了 2 周,我無法繼續(xù)。請幫助我。它看起來很簡單的代碼但是......我的結(jié)構(gòu)是這樣的,開始部分 private void Form1_Load(object sender, EventArgs e)  {    Bitmap bmp = new Bitmap("c:\\yavanna.jpg");    pictureBox1.Image = Image.FromFile("c:\\yavanna.jpg");    int width = bmp.Width;    int height = bmp.Height;    Color p;    int[,] alpha_map_int = new int[width, height];    int[,] red_map_int = new int[width, height];    int[,] green_map_int = new int[width, height];    int[,] blue_map_int = new int[width, height];    int[,] grayscale_map_int = new int[width, height];    string[,] gray_scale_map = new string[width, height];    string temp_hexValue;    for (int y = 0; y < height; y++)    {        for (int x = 0; x < width; x++)        {            //get pixel value            p = bmp.GetPixel(x, y);            //extract pixel component ARGB            int a = p.A;            alpha_map_int[x, y] = a;            int r = p.R;            red_map_int[x, y] = r;            int g = p.G;            green_map_int[x, y] = g;            int b = p.B;            blue_map_int[x, y] = b;            //convert to gryscale            double grayscale = 0.2126 * red_map_int[x,y] + 0.7152 * green_map_int[x, y] + 0.0722 * blue_map_int[x, y];            grayscale_map_int[x, y] = Convert.ToInt32(grayscale);            temp_hexValue = Convert.ToString(grayscale_map_int[x, y]);            gray_scale_map[x, y] = temp_hexValue;      }    }
查看完整描述

2 回答

?
牧羊人nacy

TA貢獻1862條經(jīng)驗 獲得超7個贊

這是 jdweng 答案的一個版本,它生成 4x4 數(shù)組并處理不除以 4 的源數(shù)組。您可以看到他為什么發(fā)布了一個簡化示例。如果再大一點,就值得再使用兩個循環(huán)來填充 4x4 數(shù)組。


'image' 是輸入,'bytes4x4' 是輸出。


List<List<List<byte>>> bytes4x4 = new List<List<List<byte>>>();


for (int row = 0; row<length-3 ; row += 4)

{

    for (int col = 0; col<width-3; col += 4)

    {

        bytes4x4.Add(new List<List<byte>>()  { 

            new List<byte>() { image[row, col], image[row, col + 1], image[row, col + 2], image[row, col + 3]}, 

            new List<byte>() { image[row + 1, col], image[row + 1, col + 1], image[row + 1, col + 2], image[row + 1, col + 3] }, 

            new List<byte>() { image[row + 2, col], image[row + 2, col + 1], image[row + 2, col + 2], image[row + 2, col + 3] },

            new List<byte>() { image[row + 3, col], image[row + 3, col + 1], image[row + 3, col + 2], image[row + 3, col + 3] }

    });

}

這將聲明并填充“bytes4x4”,這是一長串二維塊。訪問這樣的塊:


var block100 = bytes4x4[100];

并使用它來獲取像素:


var block100pixelrow1col3 = block100[1][3];

或者


var block100pixelrow1col3 = bytes4x4[100][1][3];

請注意,這些索引都是從零開始的,因此塊中沒有元素 [4]。


現(xiàn)在我想一想,你可能在追求二維塊的二維數(shù)組。如果是這樣,代碼將如下所示:


var bytes4x4 = new List<List<List<List<byte>>>>();


for (int row = 0; row<length-3 ; row += 4)

{

    var row = new List<List<List<byte>>>();

    bytes4x4.Add(row);

    for (int col = 0; col<width-3; col += 4)

    {

        row.Add(new List<List<byte>>()  { 

            new List<byte>() { image[row, col], image[row, col + 1], image[row, col + 2], image[row, col + 3]}, 

            new List<byte>() { image[row + 1, col], image[row + 1, col + 1], image[row + 1, col + 2], image[row + 1, col + 3] }, 

            new List<byte>() { image[row + 2, col], image[row + 2, col + 1], image[row + 2, col + 2], image[row + 2, col + 3] },

            new List<byte>() { image[row + 3, col], image[row + 3, col + 1], image[row + 3, col + 2], image[row + 3, col + 3] }

    });

}

然后你可以像這樣訪問一個向下 14 行和 23 列的塊:


var block14by23 = bytes4x4[14][23];


查看完整回答
反對 回復 2021-12-25
?
MMTTMM

TA貢獻1869條經(jīng)驗 獲得超4個贊

嘗試以下:


       const string FILENAME = @"c:\temp\test.jpg";

        public Form1()

        {

            InitializeComponent();


            Bitmap image = new Bitmap(FILENAME);



            int height = (int)image.Height ;

            int width = (int)image.Width;



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

            List<List<List<Int32>>> grayscale_map_int = new List<List<List<Int32>>>();



            for (int row = 0; row < height; row += 4)

            {

                for (int col = 0; col < width; col += 4)

                {

                    bytes.Add(new List<List<Color>>()  { 

                         new List<Color>() { image.GetPixel(col, row), image.GetPixel(col + 1, row), image.GetPixel(col + 2, row), image.GetPixel(col + 3, row)} , 

                         new List<Color>() { image.GetPixel(col, row + 1), image.GetPixel(col + 1, row + 1), image.GetPixel(col + 2, row + 1), image.GetPixel(col + 3, row + 1)} , 

                         new List<Color>() { image.GetPixel(col, row + 2), image.GetPixel(col + 1, row + 2), image.GetPixel(col + 2, row + 2), image.GetPixel(col + 3, row + 2)} , 

                         new List<Color>() { image.GetPixel(col, row + 3), image.GetPixel(col + 1, row + 3), image.GetPixel(col + 2, row + 3), image.GetPixel(col + 3, row + 3)} , 

                    });


                    grayscale_map_int.Add(new List<List<Int32>>()  { 

                         new List<Int32>() { GetGrayScale(image.GetPixel(col, row)), GetGrayScale(image.GetPixel(col + 1, row)), GetGrayScale(image.GetPixel(col + 2, row)), GetGrayScale(image.GetPixel(col + 3, row))} , 

                         new List<Int32>() { GetGrayScale(image.GetPixel(col, row + 1)), GetGrayScale(image.GetPixel(col + 1, row + 1)), GetGrayScale(image.GetPixel(col + 2, row + 1)), GetGrayScale(image.GetPixel(col + 3, row + 1))} , 

                         new List<Int32>() { GetGrayScale(image.GetPixel(col, row + 2)), GetGrayScale(image.GetPixel(col + 1, row + 2)), GetGrayScale(image.GetPixel(col + 2, row + 2)), GetGrayScale(image.GetPixel(col + 3, row + 2))} , 

                         new List<Int32>() { GetGrayScale(image.GetPixel(col, row + 3)), GetGrayScale(image.GetPixel(col + 1, row + 3)), GetGrayScale(image.GetPixel(col + 2, row + 3)), GetGrayScale(image.GetPixel(col + 3, row + 3))} , 

                    });


                }

            } 



        }

        public Int32 GetGrayScale(Color color)

        {

            return Convert.ToInt32(0.2126 * color.R + 0.7152 * color.G + 0.0722 * color.B);

        }


查看完整回答
反對 回復 2021-12-25
  • 2 回答
  • 0 關(guān)注
  • 214 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號