Witam,
mam kod programu na filtr splotowy i nie rozumie niektórych fragmentów prosiłbym o pomoc w zrozumieniu tych niektórych linijek.
Pierwsza linijka której nie rozumie to:
int[,] siatka = {{ -1, -1 }, { 0, 1 }, { 1, -1 }, { -1, 0 }, { 0, 0 }, { 1, 0 }, { -1, 1 }, { 0, -1 }, { 1, 1 } };
czy tutaj tablica dwu wymiarowa jest zapełniana wartościami?
Nie rozumie też tych linijek:
x = i + siatka[k, 0];
y = j + siatka[k, 0];
Jakie wartości kryją się pod:
siatka[k, 0]
CAŁY KOD PROGRAMU:
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;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
Bitmap bmp;
Bitmap bmp_pom;
int[,] siatka = { { -1, -1 }, { 0, 1 }, { 1, -1 }, { -1, 0 },
{ 0, 0 }, { 1, 0 }, { -1, 1 }, { 0, -1 }, { 1, 1 } }; //nie rozumie tej linijki
private void otworzToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
OpenFileDialog open = new OpenFileDialog();
open.Filter = "Image Files(*.jpg; *.jpeg; *.gif; *.bmp)|*.jpg; *.jpeg; *.gif; *.bmp";
if (open.ShowDialog() == DialogResult.OK)
{
this.bmp = new Bitmap(open.FileName);
this.bmp_pom = new Bitmap(open.FileName);
pictureBox1.Image = bmp_pom;
}
}
catch (Exception)
{
throw new ApplicationException("Failed loading image");
}
}
private void maska(int[] filtr, int dzielnik)
{
int czerwony = 0;
int zielony = 0;
int niebieski = 0;
int x = 0;
int y = 0;
for (int i = 0; i < bmp_pom.Width; i++)
for (int j = 0; j < bmp_pom.Height; j++)
{
czerwony = 0;
zielony = 0;
niebieski = 0;
for (int k = 0; k < dzielnik; k++)
{
x = i + siatka[k, 0]; // tutaj nie wiem jakie
y = j + siatka[k, 0]; // wartości znajdują się pod siatka[k,0]
if (x < 0) x = 0;
if (x >= bmp_pom.Width) x = bmp_pom.Width - 1;
if (y < 0) y = 0;
if (y >= bmp_pom.Height) y = bmp_pom.Height - 1;
Color c = bmp_pom.GetPixel(x, y);
czerwony += (c.R * filtr[k]);
zielony += (c.G * filtr[k]);
niebieski += (c.B * filtr[k]);
}
czerwony = (int)(czerwony / 9);
zielony = (int)(zielony / 9);
niebieski = (int)(niebieski / 9);
if (czerwony > 255) czerwony = 255; else if (czerwony < 0) czerwony = 0;
if (zielony > 255) zielony = 255; else if (zielony < 0) zielony = 0;
if (niebieski > 255) niebieski = 255; else if (niebieski < 0) niebieski = 0;
Color newColor = Color.FromArgb(czerwony, zielony, niebieski);
bmp_pom.SetPixel(i, j, newColor);
}
}
private void usredniajacyToolStripMenuItem_Click(object sender, EventArgs e)
{
int[] filtr = {1,1,1,1,1,1,1,1,1};
maska(filtr, 9);
pictureBox1.Image = bmp_pom;
}
private void dollnoprrzepusttowyToolStripMenuItem_Click(object sender, EventArgs e)
{
int[] filtr = { 1, 2, 1, 2, 4, 2, 1, 2, 1 };
maska(filtr, 2);
pictureBox1.Image = bmp_pom;
}
private void górnoprzepustowyToolStripMenuItem_Click(object sender, EventArgs e)
{
int[] filtr = { 0, -1, 0, -1, 4, -1, 0, -1, 0 };
maska(filtr, 1);
pictureBox1.Image = bmp_pom;
}
}
}