Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mengezum dan Menyorot Imej dengan betul dari Lokasi Tetikus dalam C#?

Bagaimana untuk Mengezum dan Menyorot Imej dengan betul dari Lokasi Tetikus dalam C#?

DDD
DDDasal
2024-12-30 20:18:12577semak imbas

How to Correctly Zoom and Pan an Image from the Mouse Location in C#?

Zum dan Terjemah Imej daripada Lokasi Tetikus

Penerangan Isu

Apabila cuba mengezum dan menskalakan imej dari lokasi tetikus, imej melompat dan gagal berskala dari asal yang dipindahkan. Putaran, skala dan sorot berfungsi dengan betul tanpa menterjemah ke lokasi tetikus.

Pelaksanaan

Untuk mencapai zum dan menterjemah imej dari lokasi tetikus, kami menggunakan strategi berikut:

  • TranslateTransform: Menterjemah peta bit kepada tetikus kedudukan.
  • ScaleTransform: Skala imej mengikut faktor zum.
  • TranslateTransform: Menterjemah imej kembali ke kedudukan asalnya.
  • TranslateTransform: Menterjemah imej berdasarkan kuali kedudukan.

Kod

private void pnl1_Paint(object sender, PaintEventArgs e)
{
    // Apply rotation angle @ center of bitmap
    e.Graphics.TranslateTransform(img.Width / 2, img.Height / 2);
    e.Graphics.RotateTransform(ang);
    e.Graphics.TranslateTransform(-img.Width / 2, -img.Height / 2);

    // Apply scaling factor - focused @ mouse location
    e.Graphics.TranslateTransform(mouse.X, mouse.Y, MatrixOrder.Append);
    e.Graphics.ScaleTransform(zoom, zoom, MatrixOrder.Append);
    e.Graphics.TranslateTransform(-mouse.X, -mouse.Y, MatrixOrder.Append);

    // Apply drag (pan) location
    e.Graphics.TranslateTransform(imgX, imgY, MatrixOrder.Append);

    // Draw "bmp" @ location
    e.Graphics.DrawImage(img, 0, 0);
}

Cadangan

  • Bahagi dan takluki transformasi kepada kaedah khusus.
  • Gunakan PictureBox tersuai dengan penimbalan berganda (cth., PictureBoxEx).
  • Gunakan Matrix.RotateAt dan Matrix.Darab untuk transformasi yang cekap.

Atas ialah kandungan terperinci Bagaimana untuk Mengezum dan Menyorot Imej dengan betul dari Lokasi Tetikus dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn