1

Тема: Спотворення зображення

Хай. Захтів розібратись з спотворенням зображення. Ну типу знаєте, як переломлення світла.
Для початку захтів зробити просто зум, і прямо тут в мне вже нічо не вийшло.
На малюнку показано, що я хочу зробити.

Прихований текст

http://не-дійсний-домен/dYnQh/35368ae838.png

Нехай, ми клікаємо в точку 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);
        }
    }
}

2

Re: Спотворення зображення

Першу помилку знайшов. Вона була в стрічці 41 (у всьому коді), там тре було не

 l < Y - size*zoom

,
а

l < Y + size*zoom