2008-08-26 7 views
17

मैं स्ट्रैचइमेज का उपयोग कर रहा हूं क्योंकि बॉक्स स्प्लिटर के साथ आकार बदल सकता है। ऐसा लगता है कि डिफ़ॉल्ट कुछ प्रकार की चिकनी बिलीनेर फ़िल्टरिंग है, जिससे मेरी छवि धुंधली हो जाती है और मूर पैटर्न होते हैं।मैं एक पिक्चरबॉक्स कैसे निकटतम पड़ोसी resampling का उपयोग कर सकते हैं?

+1

तो वहाँ यह करने के लिए कोई वास्तविक तरीका है: मैं एक वर्ग कि PictureBox विरासत, OnPaint ओवरराइड करता है और प्रक्षेप मोड सेट करने के लिए अनुमति देने के लिए एक संपत्ति कहते हैं बनाया? कुछ आसान फैशन में? – Luiscencio

+0

@ लुइसेंसिओ: यह वही दिखता है। आपको इसे उचित आकार के नए बिटमैप और फिर ग्राफिक्स के साथ करना होगा। ड्राइमेज –

+0

आपको जेयलटन उत्तर को चिह्नित करना होगा। :) – Pedro77

उत्तर

24

मैं इस कार्यक्षमता की जरूरत भी।

/// <summary> 
/// Inherits from PictureBox; adds Interpolation Mode Setting 
/// </summary> 
public class PictureBoxWithInterpolationMode : PictureBox 
{ 
    public InterpolationMode InterpolationMode { get; set; } 

    protected override void OnPaint(PaintEventArgs paintEventArgs) 
    { 
     paintEventArgs.Graphics.InterpolationMode = InterpolationMode; 
     base.OnPaint(paintEventArgs); 
    } 
} 
+0

बहुत अच्छा। मुझे लगता है कि EmguCV के PanAndZoomPictureBox वही करते हैं। क्या आप इसे करने वाले किसी भी प्रदर्शन मुद्दे से अवगत हैं? – Pedro77

+0

मेरे पास इस तरह से इंटरपोलेशन मोड को बदलने में कोई मापनीय प्रदर्शन अंतर नहीं है। – JYelton

+0

हम अच्छे हैं। जेरेड अपडेइक को आपके जवाब को चिह्नित करना चाहिए! :) – Pedro77

5

मुझे संदेह है कि आपको छवि वर्ग और ड्राइमेज फ़ंक्शन के माध्यम से मैन्युअल रूप से आकार बदलने और पिक्चरबॉक्स पर आकार बदलने की घटनाओं का जवाब देना होगा।

0

जब .net में एक छवि का आकार बदलने, System.Drawing.Drawing2D.InterpolationMode निम्नलिखित आकार बदलने के तरीके प्रदान करता है:

  • Bicubic
  • द्विरेखीय
  • उच्च
  • HighQualityBicubic
  • HighQualityBilinear
  • कम
  • निकटतम एन eighbor
  • डिफ़ॉल्ट
+0

मुझे नहीं लगता कि यह ओपी के प्रश्न को कैसे संबोधित करता है। – JYelton

3

मैं एक MSDN खोज किया था और इस पर एक लेख है, जो बहुत विस्तृत नहीं है, लेकिन रूपरेखा है कि आप रंग घटना का उपयोग करना चाहिए है पता चला।

http://msdn.microsoft.com/en-us/library/k0fsyd4e.aspx

मैं इस सुविधा का उपयोग करने के लिए उदाहरण जूमिंग एक सामान्य रूप से उपलब्ध छवि संपादित,

से संपादित नीचे देखें: http://www.dotnetcurry.com/ShowArticle.aspx?ID=196&AspxAutoDetectCookieSupport=1

आशा इस मदद करता है

private void Form1_Load(object sender, EventArgs e) 
    { 
     // set image location 
     imgOriginal = new Bitmap(Image.FromFile(@"C:\images\TestImage.bmp")); 
     picBox.Image = imgOriginal; 

     // set Picture Box Attributes 
     picBox.SizeMode = PictureBoxSizeMode.StretchImage; 

     // set Slider Attributes 
     zoomSlider.Minimum = 1; 
     zoomSlider.Maximum = 5; 
     zoomSlider.SmallChange = 1; 
     zoomSlider.LargeChange = 1; 
     zoomSlider.UseWaitCursor = false; 

     SetPictureBoxSize(); 

     // reduce flickering 
     this.DoubleBuffered = true; 
    } 

    // picturebox size changed triggers paint event 
    private void SetPictureBoxSize() 
    { 
     Size s = new Size(Convert.ToInt32(imgOriginal.Width * zoomSlider.Value), Convert.ToInt32(imgOriginal.Height * zoomSlider.Value)); 
     picBox.Size = s; 
    } 


    // looks for user trackbar changes 
    private void trackBar1_Scroll(object sender, EventArgs e) 
    { 
     if (zoomSlider.Value > 0) 
     { 
      SetPictureBoxSize(); 
     } 
    } 

    // redraws image using nearest neighbour resampling 
    private void picBox_Paint_1(object sender, PaintEventArgs e) 
    { 
     e.Graphics.InterpolationMode = InterpolationMode.NearestNeighbor; 
     e.Graphics.DrawImage(
      imgOriginal, 
      new Rectangle(0, 0, picBox.Width, picBox.Height), 
      // destination rectangle 
      0, 
      0,   // upper-left corner of source rectangle 
      imgOriginal.Width,  // width of source rectangle 
      imgOriginal.Height,  // height of source rectangle 
      GraphicsUnit.Pixel); 
    } 
+0

आपकी तस्वीर को आपके picBox_Paint_1 विधि से किस तरह से तारित किया गया है? यह आपके कोड के किसी अन्य भाग में होगा। –

+0

हाँ यह फॉर्म डिज़ाइनर कोड में है: this.picBox.Paint + = new System.Windows.Forms.PaintEventHandler (this.picBox_Paint_1); – ardunn

संबंधित मुद्दे