Тема: Спотворення зображення
Хай. Захтів розібратись з спотворенням зображення. Ну типу знаєте, як переломлення світла.
Для початку захтів зробити просто зум, і прямо тут в мне вже нічо не вийшло.
На малюнку показано, що я хочу зробити.
Нехай, ми клікаємо в точку 100,100 (саме зображення має розміри 200 на 200).
І от ця точка являється центром квадрата розмірами 20х20, котрий нам необхідно збільшити в 4 рази.
Ну я написав такий от код
private Bitmap SimpleThing( MouseEventArgs e)
{
Bitmap image = new Bitmap(mainBitmap); //mainBitmap - це наша картинка, тут я роблю її копію, і вже з копією будемо працювати
int zoom = 4;
int size = 20/2;
int X = e.X; // точка, куди ми клікнули мишкою
int Y = e.Y; //
for (int i = X - size; i < X + size; i++) // прохід по мікселям квадрату, котрий 20х20
{
for (int j=Y-size; j< Y+size; j++)
{
for (int k = X - size*zoom; k < X + size*zoom; k++) // тут я проходжу вже по "збільшеним пікселям"
квадрату, котрий 80х80
{
for (int l = Y - size*zoom; l < Y - size*zoom; l++)
{
for (int k1 = k; k1 < k + zoom; k1++) // а тут я заповнюю кожен "збільшенний піксель" кольором справжнього пікселя з квадрату 20x20
{
for (int j1 = l; j1 < l + zoom; j1++)
{
image.SetPixel(k1,j1,mainBitmap.GetPixel(i,j));
}
}
}
}
}
}
return image;
}
в результаті нічого не відбувається
Чому так?
От весь код
using System;
using System.Drawing;
using System.Windows.Forms;
namespace refraction
{
public partial class Form1 : Form
{
private Bitmap mainBitmap;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
pictureBox1.Size=new Size(Width, Height);
mainBitmap=new Bitmap(pictureBox1.Image);
}
private void pictureBox1_Click(object sender, EventArgs e)
{
}
private Bitmap SimpleThing( MouseEventArgs e)
{
Bitmap image = new Bitmap(mainBitmap);
int zoom = 4;
int size = 20/2;
int X = e.X;
int Y = e.Y;
for (int i = X - size; i < X + size; i++)
{
for (int j=Y-size; j< Y+size; j++)
{
for (int k = X - size*zoom; k < X + size*zoom; k++)
{
for (int l = Y - size*zoom; l < Y - size*zoom; l++)
{
for (int k1 = k; k1 < k + zoom; k1++)
{
for (int j1 = l; j1 < l + zoom; j1++)
{
image.SetPixel(k1,j1,mainBitmap.GetPixel(i,j));
}
}
}
}
}
}
return image;
}
private void pictureBox1_MouseClick(object sender, MouseEventArgs e)
{
pictureBox1.Image = SimpleThing(e);
}
}
}