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
Lepaskan: 2024-12-30 20:18:12
asal
577 orang telah melayarinya

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);
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan