Ошибка при попытке масштабирвоания изображения picturebox

151
27 апреля 2022, 18:10

Пытаюсь сделать масштабирование picturebox. Честно говоря, в c# я очень слаб. Пробую реализовать масштабирование с помощью умножения высоты и ширины на 1.2, но ожидаемо получаю ошибку:

System.AccessViolationException: "Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена."

Скорее всего это как-то связано с тем, что в picturebox я не загружаю изображение, а рисую в нём битмап. Что я делаю не так и как можно исправить?

public partial class Form1 : Form
{
    public static Bitmap myBitmap = new Bitmap("img\\BigMap.png");
    public Graphics pctMap;
    public bool CheckClick = false;
    public Form1()
    {
        InitializeComponent();
        AutoSize = true;
        pctMap = this.pictureBox1.CreateGraphics();
        pictureBox1.Size = ClientSize;
        pictureBox1.SizeMode = PictureBoxSizeMode.Zoom;
    }
    public void pictureBox1_Click(object sender, EventArgs e)
    {
        //получение цвета нажатого пикселя
        MouseEventArgs rato = e as MouseEventArgs;
        int x = rato.X * myBitmap.Width / pictureBox1.ClientSize.Width;
        int y = rato.Y * myBitmap.Height / pictureBox1.ClientSize.Height;
        Color backColor = myBitmap.GetPixel(x, y);
        string hex = backColor.R.ToString("X2") + backColor.G.ToString("X2") + backColor.B.ToString("X2");
        textBox1.Text = hex.ToString();
        Connection mc = new Connection();
        //считывание цвета из бд
        string query = "SELECT id, NameUK  FROM data1 WHERE Color='#" + hex.ToString() + "'";
        MySqlCommand command = new MySqlCommand(query, mc.conopen());
        //вывод названия страны в textBox2
        MySqlDataReader reader = command.ExecuteReader();
        while (reader.Read())
        {
            // элементы массива [] - это значения столбцов из запроса SELECT
            textBox2.Text = reader[1].ToString();
        }
        CheckClick = !CheckClick;
        if (CheckClick)
        {
            myBitmap.MakeTransparent(backColor);
            pictureBox1.Refresh();
        }
        else
        {
            myBitmap = new Bitmap(@"img\BigMap.png");
            pictureBox1.Refresh();
        }
        mc.conclose();
    }
    //Полноэкранный режим
    private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyData == Keys.F11)
        {
            this.WindowState = FormWindowState.Maximized;
            this.FormBorderStyle = FormBorderStyle.None;
            //Taskbar.Show();
        }
    }
    private void Form1_Load(object sender, EventArgs e)
    {
        
    }
    private void pictureBox1_Paint(object sender, PaintEventArgs e)
    {
        e.Graphics.DrawImage(myBitmap, 0, 0, pictureBox1.Width, pictureBox1.Height);
    }
    private void button1_Click(object sender, EventArgs e)
    {
        pictureBox1.Width *= (int)(pictureBox1.Width * 1.2);
        pictureBox1.Height *= (int)(pictureBox1.Height * 1.2);
    }
}
READ ALSO
Переопределение времени при переносе данных в DataGridView

Переопределение времени при переносе данных в DataGridView

После обработки одной из таблиц DGVW1 данные (например) перетекают в DGVW3 и в момент, когда это происходит в ячейку записывается время (код прилагается)Нужно...

139
При наследовании класс родителя возвращает 0

При наследовании класс родителя возвращает 0

При вызову Soldier метод SoldierFindQ() возвращает произведние weight и hight, как и нужно

147
Проблема включения микрофона в программе C#

Проблема включения микрофона в программе C#

я сделал голосового ассистента на Python, но решил, перейти на C#По видеоуроку я написал этот код который должен слушать микрофон и писать цифру...

213
Возвращаемый тип для анонимного метода

Возвращаемый тип для анонимного метода

Есть анонимный метод (выполняет через рефлексию методы объекта)

122