  | 
              
	              
	                
  
    |   | 
   
  
    
        
        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 | 
                         
                    | 
                     | 
                 
                
                     | 
                     | 
                     | 
                 
                | 
             
           
			         | 
             | 
         
        
             | 
            | 
             | 
             | 
         
          
	    
     
               
		
     
		
	     
	    
     
      		  
	
     | 
   
 
                 |