C# e Aforge - Estrazione di immagini da Blobs
Domanda
Seguire la funzione risolve il problema, ma non capisco come chiamarlo, in particolare la parte "out list imgletters".
public static bool ApplyBlobExtractor (Bitmap SourceImg, int LettersCount, out List<Bitmap> ImgLetters)
{
ImgLetters = null;
ImgLetters = new List<Bitmap> ();
BlobCounter blobCounter = new BlobCounter ();
// Sort order
blobCounter.ObjectsOrder = ObjectsOrder.XY;
blobCounter.ProcessImage (SourceImg);
Blob[] blobs = blobCounter.GetObjects (SourceImg, false);
// Adding images into the image list
UnmanagedImage currentImg;
foreach (Blob blob in blobs)
{
currentImg = blob.Image;
ImgLetters.Add (currentImg.ToManagedImage ());
}
return ImgLetters.Count == LettersCount;
}
Ora guardiamo questo:
public static bool ApplyBlobExtractor (Bitmap SourceImg, int LettersCount, out List<Bitmap> ImgLetters)
Bitmap sourceimg - immagine, dove si troverà Blobs
int Letterscount - BLOB che stiamo per estrarre (numero)
Out List IMGLETTERS - ???
Cosa fa il 3 ° parametro (come chiamare questa funzione)?
Bitmap image1 = new Bitmap(@"C:\1.png");
..
ApplyBlobExtractor (image1, 1, ??? )
..
image2.save(@"C:\2.png")
Soluzione
un out
Il parametro consente di ottenere i risultati da una chiamata di metodo diverso da tramite il parametro di ritorno. http://msdn.microsoft.com/en-us/library/t3c3bfhx(v=vs.80).aspx
Nel tuo esempio il metodo ApplyBlobExtractor
Sembra prendere una bitmap di origine e una lettera (presumibilmente il numero di lettere che ti aspetti di trovare) usa quindi questo oggetto blobcounter per tagliarlo. Ritornerà vero se trova lo stesso numero di lettere che ti aspetti di trovare. Ti fornirà anche le immagini di output come elenco tramite il parametro Out.
chiamarlo farebbe qualcosa come ...
Bitmap img1 = new Bitmap(@"C:\1.png");
List<Bitmap> foundImages;
bool result = ApplyBlobExtractor(img1, 1, out foundImages);