2016-04-06 18 views
1

Çoktan seçmeli sınamaları denetlemek için tasarlanmış bir program oluşturuyorum. Uygulamam, arka plan renginden (beyaz) farklı bir rengin piksellerini arayacak kareler anlamına geliyor. Stringbuilder Ben bireysel noktaların pozisyonunu sıralardım (kare köşeler).Aforge.NET - StringBuilder öğesinden öğe al

Soruma soru: Aşağıdaki kod bloğunda görebileceğiniz StringBuilder, ilk olarak, myPoint.Y değişkenine myPoint.X değişkenini (virgülle ayırarak) bir saniyeye ilk olarak nasıl atayabilirim? Stringbuilder'da noktaları noktalı virgülle ayırdım?

İkincisi: Bu noktalara sahip olmak, pikselleri arayacağım kareleri çizebiliyorum?

Yardımlarınız için teşekkürler.

public void ImageProcessing(PictureBox pbox, Bitmap bitmap, TextBox tb1) 
     { 
      //var nbitmap = UnmanagedImage.FromManagedImage(bitmap); 
      bitmap = (Bitmap)pbox.Image.Clone(); 
      BitmapData bitmapData = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, 
       bitmap.Height), 
       ImageLockMode.ReadWrite, bitmap.PixelFormat); 
      ColorFiltering colorFiltering = new ColorFiltering(); 

      colorFiltering.Red = new IntRange(0, 64); 
      colorFiltering.Green = new IntRange(0, 64); 
      colorFiltering.Blue = new IntRange(0, 64); 
      colorFiltering.FillOutsideRange = false; 
      colorFiltering.ApplyInPlace(bitmapData); 

      IntPoint myPoint = new IntPoint(); 

      BlobCounter blobCounter = new BlobCounter(); 
      blobCounter.FilterBlobs = true; 
      blobCounter.MinHeight = 15; 
      blobCounter.MinWidth = 15; 

      blobCounter.ProcessImage(bitmapData); 
      Blob[] blobs = blobCounter.GetObjectsInformation(); 
      bitmap.UnlockBits(bitmapData); 

      SimpleShapeChecker shapeChecker = new SimpleShapeChecker(); 


      Graphics g = Graphics.FromImage(bitmap); 
      Pen redPen = new Pen(Color.Red, 3); 
      Pen bluePen = new Pen(Color.Blue, 3); 
      List<IntPoint> corners = new List<IntPoint>(); 


      StringBuilder sb = new StringBuilder(); 
      string stg = ""; 


      List<IntPoint> zbior = new List<IntPoint>(); 

      for (int i = 0, n = blobs.Length; i < n; i++) 
      { 
       List<IntPoint> edgePoints =  blobCounter.GetBlobsEdgePoints(blobs[i]); 

       if (shapeChecker.IsQuadrilateral(edgePoints, out corners)) 
       { 

        PolygonSubType subType = shapeChecker.CheckPolygonSubType(corners); 

        Pen pen = null; 

        if (subType == PolygonSubType.Square) 
        { 

         pen = (corners.Count == 4) ? redPen : bluePen; 
         foreach (var item in corners) 
         { 
          sb.Append(item).Append(";"); 

         } 

        } 


        g.DrawPolygon(pen, ToPointsArray(corners)); 
       } 

      } 
tb1.Text = stg; 

       redPen.Dispose(); 
       bluePen.Dispose(); 
       g.Dispose(); 
       Clipboard.SetDataObject(bitmap); 
       pbox.Image = bitmap; 
      } 

     } 
+0

Tamam. Şimdi noktalardan oluşan bir dizi var. Soru şudur: Bitmap'i (karelerimin köşeleriyle sınırlı olarak) arka planımın renginden farklı renkte nasıl arayabilirim? Bu kareleri başka bir renkle işaretlemek mümkün mü? – k1dl3r

cevap

0

Dizeyi, dizenin tamamını döndürecek olan ToString() yöntemini çağırarak StringBuilder öğesinden döndürürsünüz.

İkinci sorunuzu istediğinizden emin değilim, lütfen detaylandırır mısınız?

İlgili konular