Вывод изображения - C# (185367)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Передо мной стоит следующая задача - провести дискретное вейвлет-преобразование изображения методом Хаара. Я работаю следующим образом - выделяю RGB компоненты и записываю полученные значения в соответствующие вещественные массивы. Далее выполняются некоторые преобразования (пока что они реализованы для одного массива - просто сделал для примера), после которых необходимо значения массива, которые получены в итоге, записать по пикселям, что я пытался сделать следующим образом
for (i = 0; i < img.Height; i++)
            {
                for (j = 0; j < img.Width; j++)
                {
                    Color pixel = img.GetPixel(j, i);
 
                    if (i < img.Height && j < img.Width)
                    {
                      pixel =  dvp[i, j]; 
                        
                        Console.WriteLine("R = [" + i + "][" + j + "] = " + Rcomponent[i, j]);
                    }
                }
            }
но появляется ошибка "Не удается явно преобразовать тип int в System.Drawing.Color". Как можно справиться с этой проблемой? Или нужно вообще действовать по иному принципу? И как в итоге вывести полученные результаты в виде преобразованного изображения? Весь код представлен ниже.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace WindowsFormsApplication3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
                private void buttonOpenFile_Click(object sender, EventArgs e)
        {
            OpenFileDialog openDialog = new OpenFileDialog();
            openDialog.Filter = "Image Files (*.jpg; *.png; *.bmp)| *.jpg; *.png; *.bmp";
            if (openDialog.ShowDialog() == DialogResult.OK)
            {
                textBoxFilePath.Text = openDialog.FileName.ToString();
                pictureBox1.ImageLocation = textBoxFilePath.Text;
            }
        }
 
        private void buttonEncode_Click(object sender, EventArgs e)
        {

            Bitmap img = new Bitmap(textBoxFilePath.Text);

            float[,] Rcomponent = new float[img.Height, img.Width];
            float[,] Gcomponent = new float[img.Height, img.Width];
            float[,] Bcomponent = new float[img.Height, img.Width];
            float[,] Gdopcomponent = new float[img.Height, img.Width];
            float[,] Bdopcomponent = new float[img.Height, img.Width];

            int i, j, m, n, b, k, l, r, doc, t, sh, sh1;

            for (i = 0; i < img.Height; i++)
            {
                for ( j = 0; j < img.Width; j++)
                {
                    Color pixel = img.GetPixel(j, i);
 
                    if (i < img.Height && j < img.Width)
                    {

                        Rcomponent[i, j] = pixel.R;
                        Gcomponent[i, j] = pixel.G;
                        Bcomponent[i, j] = pixel.B;
                        //pixel = Rcomponent[i, j];
                        Console.WriteLine("R = [" + i + "][" + j + "] = " + Rcomponent[i, j]);
                        Console.WriteLine("G = [" + i + "][" + j + "] = " + Gcomponent[i, j]);
                        Console.WriteLine("B = [" + i + "][" + j + "] = " + Bcomponent[i, j]);

                    }
                }
            }
 
           //Разбиение на интервалы по строкам
            m = img.Height;
            n = img.Width;
            t = n;
            for (i = 0; i < img.Height; i++)
            {
                r = t;
                k = t;
                l = t;
                doc = 0;
                for (j = 0; j < k; j++)
                {
 
                    if (l % 2 != 0 && l > 1)
                    {
                        l++;
                        //cout << l << endl;
                        l /= 2;
                        doc++;

                        //cout << l << endl;
 
                    }
                    else
                    if (l % 2 == 0 && l > 1)
                    {
                        l /= 2;
                        doc++;
                    }
                    if (l == 1)
                    {
                        while (doc > 0)
                        {
                            l *= 2;
                            n = l;
                            doc--;
 
                        }
                    }
                }
 
            }
            //cout << "n:" << n << endl;
            //b=1;

            float[,] Rdopcomponent = new float[img.Height, n];

            k = t;
            for (i = 0; i < img.Height; i++)
            {
                b = 1;
                for (j = 0; j < n; j++)
                {
                    if (j >= k)
                    {
                        Rdopcomponent[i, j] = Rcomponent[i, j - b];
                        b += 2;
                    }
                    else
                    { Rdopcomponent[i, j] = Rcomponent[i, j]; }
 
                    Console.Write(Rdopcomponent[i, j]);
                }
            
               Console.WriteLine ("");
            }
            Console.WriteLine("");

            //Разбиение на интервалы по столбцам
            t = m;
            for (j = 0; j < n; j++)
            {
                r = t;
                k = t;
                l = t;
                doc = 0;
                for (i = 0; i < img.Height; i++)
                {
                    if (l % 2 != 0 && l > 1)
                    {
                        l++;
                        //cout << l << endl;
                        l /= 2;
                        doc++;

                        //cout << l << endl;
 
                    }
                    else
                 if (l % 2 == 0 && l > 1)
                    {
                        l /= 2;
                        doc++;
                    }
                    if (l == 1)
                    {
                        while (doc > 0)
                        {
                            l *= 2;
                            m = l;
                            doc--;
 
                        }
                    }
                }
            }
            // cout << "m:" << m << endl;
            float[,] Rdop1component = new float[m, n];
 
            //b=1;
            for (j = 0; j < n; j++)
            {
                b = 1;
                for (i = 0; i < m; i++)
                {
                    if (i >= k)
                    {
                        Rdop1component[i,j] = Rdopcomponent[i - b, j];
                        b += 2;
                    }
                    else
                        Rdop1component[i, j] = Rdopcomponent[i,j];
                    //Console.Write(Rdop1component[i, j]);
 
                }
                //Console.WriteLine();
 
            }
 
            for (i = 0; i < m; i++)
            {
                b = 1;
                for (j = 0; j < n; j++)
                {
                    
                    Console.Write(Rdop1component[i, j]);
 
                }
                Console.WriteLine();
 
            }
 
            Console.WriteLine("");
            Console.WriteLine("");
 
            //<----Преобразование Хаара по строкам---->

            float[,] mas = new float[m, n];
 
            sh1 = 0;
            for (i = 0; i < m; i++)
            {
                t = n;
               // cout << "t:" << t << endl;
 
                while (t > 1)
                {
                    sh1++;
 
                    //k=t;
                    r = 0;
                    for (j = t / 2; j < t; j++)
                    {
                        Rdop1component[i, j] = (mas[i, j - (t / 2) + r] - mas[i, j - (t / 2) + 1 + r]) / 2;
                        r++;
                    }

                    k = t / 2;
                    r = 0;
                    for (j = 0; j < k; j++)
                    {
                        Rdop1component[i, j] = (mas[i, j + r] + mas[i, j + r + 1]) / 2;
                        //cout<<c[i][j]<<endl;
                        r++;
                    }
 
                  //  cout << "massiv:" << endl;
 
                    for (j = 0; j < n; j++)
                    {
                        mas[i, j] = Rdop1component[i, j];
                        //printf("%6.1f", mas[i][j]);
                    }
                   // cout << endl;
 
                    t = t / 2;
                   // cout << "t:" << t << endl;
                }
            }
            sh1 /= m;
 
            for (i = 0; i < m; i++)
            {
                for (j = 0; j < n; j++)
                {
                    Console.Write(Rdop1component[i, j]);
                }
                Console.WriteLine();
            }

            Console.WriteLine("");
 
            Console.WriteLine("");
 
            //<----Преобразование Хаара по столбцам---->
            sh = 0;
            for (j = 0; j < n; j++)
            {
                t = m;
                //cout << "t:" << t << endl;
 
                while (t > 1)
                {
                    sh++;
 
                    //k=t;
                    r = 0;
                    for (i = t / 2; i < t; i++)
                    {
                        Rdop1component[i, j] = (mas[i - (t / 2) + r, j] - mas[i - (t / 2) + 1 + r, j]) / 2;
                        r++;
                    }

                    k = t / 2;
                    r = 0;
                    for (i = 0; i < k; i++)
                    {
                        Rdop1component[i, j] = (mas[i + r, j] + mas[i + r + 1, j]) / 2;
                        //cout<<c[i][j]<<endl;
                        r++;
                    }
 
                  //  cout << "massiv:" << endl;
 
                    for (i = 0; i < m; i++)
                    {
                        mas[i, j] = Rdop1component[i, j];
                        //printf("%6.1f", mas[i][j]);
                    }
                    //cout << endl;
 
                    t = t / 2;
                   // cout << "t:" << t << endl;
                    //sh++;
                   // cout << "sh:" << sh << endl;
                }
            }
            sh /= n;
            //cout << "sh" << sh <<
 
            //Вывод ДВП-матрицы
            for (i = 0; i < m; i++)
            {
                for (j = 0; j < n; j++)
                {
                    mas[i, j] = Rdop1component[i ,j];
                    Console.Write(Rdop1component[i, j]);
                }
                Console.WriteLine();
            }

            int[,] dvp = new int[m, n];
 
            for (i = 0; i < m; i++)
            {
                for (j = 0; j < n; j++)
                {
                    dvp[i, j] = (int)Rdop1component[i, j];
                    Console.Write(Rdop1component[i, j]);
                }
                Console.WriteLine();
            }
 
            for (i = 0; i < img.Height; i++)
            {
                for (j = 0; j < img.Width; j++)
                {
                    Color pixel = img.GetPixel(j, i);
 
                    if (i < img.Height && j < img.Width)
                    {

                      pixel =  dvp[i, j]; 
                        
                        Console.WriteLine("R = [" + i + "][" + j + "] = " + Rcomponent[i, j]);

                    }
                }
            }

        }
    }
}

Решение задачи: «Вывод изображения»

textual
Листинг программы
var v = (int)(dwp[i, j] + 255)/2;//здесь значение dwp приводится к диапазону 0-255, исходя из условия что -255<dwp<255. Если диапазон другой, то и преобразование должно быть другое
var c = Color.FromArgb(v, v, v);
img.SetColor(i, j, c);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.769 из 5
Похожие ответы