|
|
|
C# สอบถามหน่อยครับ ผมทำpicturebox zoomแบบมีScrollbar แต่พิกัดกับรูปที่ Zoom ไม่ตรงกับที่เมาส์ชี้ พอมีวิธีแก้ไหมครับ |
|
|
|
|
|
|
|
แล้วโปรเจคต้นฉบับของ John ผลเป็นยังไงครับ ตรงหรือไม่...?
ลองเช็คค่าตัวแปรและการกำหนดค่าให้ละเอียดดูอีกที หรือดีบักดูครับ
ไม่งั้นโพสต์โค้ดที่ทำแล้ว เผื่อใครที่ว่างและสนใจและพอจะช่วยเหลือได้บ้าง
|
|
|
|
|
Date :
2019-01-27 17:10:23 |
By :
PhrayaDev |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ของ john ไม่ตรงครับ ถ้าเราโหลดรูปภาพที่ใหญ่ครับ
พักัดและภาพที่ zoom ใน picture อันเล็กไม่ตรงกับที่เมาส์ชี้
Code (C#) Codeที่ไว้หาพิกัดครับ
private void ShowCoords(Int32 mouseX, Int32 mouseY)
{
Int32 realW = pictureEdit1.Image.Width;
Int32 realH = pictureEdit1.Image.Height;
Int32 currentW = pictureEdit1.ClientRectangle.Width;
Int32 currentH = pictureEdit1.ClientRectangle.Height;
Double zoomW = (currentW / (Double)realW);
Double zoomH = (currentH / (Double)realH);
Double zoomActual = Math.Min(zoomW, zoomH); /
Double padX = zoomActual == zoomW ? 0 : (currentW - (zoomActual * realW)) / 2;
Double padY = zoomActual == zoomH ? 0 : (currentH - (zoomActual * realH)) / 2;
Int32 realX = (Int32)((mouseX - padX) / zoomActual);
Int32 realY = (Int32)((mouseY - padY) / zoomActual);
CC.Text = "Real --> X : " + realX + "Y : " + realY;
}
Code (C#)zoom pic
private void UpdateZoomedImage(int x , int y)
{
int ax = x - 7;
int by = y - 7;
int zoomWidth = picZoom.Width / _ZoomFactor;
int zoomHeight = picZoom.Height / _ZoomFactor;
int halfWidth = zoomWidth / 2;
int halfHeight = zoomHeight / 2;
Bitmap tempBitmap = new Bitmap(zoomWidth, zoomHeight, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
Graphics bmGraphics = Graphics.FromImage(tempBitmap);
bmGraphics.Clear(_BackColor);
bmGraphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
bmGraphics.DrawImage(pictureEdit1.Image, new Rectangle(0, 0, zoomWidth, zoomHeight), new Rectangle(ax, by, zoomWidth, zoomHeight), GraphicsUnit.Pixel);
picZoom.Image = tempBitmap;
// Draw a crosshair on the bitmap to simulate the cursor position
bmGraphics.DrawLine(Pens.Aqua, halfWidth + 0, halfHeight - 4, halfWidth + 0, halfHeight - 2); //บน
bmGraphics.DrawLine(Pens.Aqua, halfWidth + 0, halfHeight + 4, halfWidth + 0, halfHeight + 2); //ล่าง
bmGraphics.DrawLine(Pens.Aqua, halfWidth - 4, halfHeight + 0, halfWidth - 2, halfHeight + 0); //ซ้าย
bmGraphics.DrawLine(Pens.Aqua, halfWidth + 4, halfHeight + 0, halfWidth + 2, halfHeight + 0); //ขวา
bmGraphics.Dispose();
picZoom.Refresh();
}
|
ประวัติการแก้ไข 2019-01-27 18:43:01
|
|
|
|
Date :
2019-01-27 18:42:08 |
By :
kamasaigis2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ผมลองดูให้แล้ว...ต้นฉบับไม่มีปัญหานะครับ ใช้ได้ปกติทุกอย่าง
แต่อาจโดน John วางยาเพื่อให้มือใหม่(ผมก็โดน) ได้มีเวลาศึกษาเองบ้าง...จุดที่ว่าคือ
ในส่วน Constructor ของ Form ไม่ต้องจัดกลางให้กับรูปภาพที่โหลดเข้ามาใน PictureBox(ต้นฉบับ)
ส่วนพิกัดไม่ต้องสร้างฟังก์ชันใหม่ ใช้วิธีการตรวจจับตำแหน่งของเมาส์เมื่อมีการเคลื่อนที่อยู่บนรูปภาพด้วย Property X, Y ของคลาส MouseEventArgs ในอีเวนต์ MouseMove ของ PictureBox ได้เลยครับ
ตัวอย่าง (C#)
// lblCo คือคอนโทรล Label ที่ใช้แสดงพิกัด X, Y
lblCo.Text = String.Format("x: {0:n0}, y: {1:n0}", e.X, e.Y);
----------
ผลการทดสอบ
|
|
|
|
|
Date :
2019-01-29 17:39:28 |
By :
PhrayaDev |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ลองเอาโค้ดที่ยังไม่ปรับแก้ มาใช้งานอดูก่อน ว่ามันตรงไม๊ ถ้าไม่ตรงก็เอา มาดูว่ามันไม่ตรงตามต้องการตรงไหน ครับ
|
|
|
|
|
Date :
2019-01-29 17:58:08 |
By :
Dr.K |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
หลังจากโหลดต้นฉบับมาลองดูปรากฎว่า มันไม่ตรงตั้งแต่ต้นฉบับ เลย
|
|
|
|
|
Date :
2019-01-29 18:22:22 |
By :
Dr.K |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอบคุณครับ คุณ พระยาเทพ และ Guest ที่มาช่วยนะครับ เดี๋ยวผมของลองปรับแก้ตาม NO.3 ก่อนครับ
|
|
|
|
|
Date :
2019-01-30 21:58:09 |
By :
kamasaigis2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ผมได้ลองแก้ไขดูแล้วครับ
ใช้ได้ครับ
คุณjohnตั้งค่า pictureboxไว้โดยใช้codeผมไม่ทันเห็นเหมือนกันครับ
Code (C#)
picImage.SizeMode = PictureBoxSizeMode.CenterImage;
picZoom.SizeMode = PictureBoxSizeMode.StretchImage;
ส่วนcode Zoomภาพของคุณjohnใช้ได้ปกติ
ส่วนcode พิกัดที่คุณพระยาเทพ ลองแก้ไขดูแล้ว พิกัดตรงแล้วครับ
|
|
|
|
|
Date :
2019-01-30 23:37:00 |
By :
kamasaigis2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 05
|