2014-11-17 15 views
8

Ricevo la seguente eccezione a ProcessImage(bitmap1, bitmap2);Pixel non supportato Formato dell'immagine sorgente o modello. AForge Imaging

Unsupported Pixel Format of source or template image 

e questo è il mio codice:

public static double FindComparisonRatioBetweenImages(
    System.Drawing.Image one, System.Drawing.Image two) 
{ 
    Bitmap bitmap1 = new Bitmap(one); 
    Bitmap bitmap2 = new Bitmap(two); 

    ExhaustiveTemplateMatching tm = new ExhaustiveTemplateMatching(0); 
    TemplateMatch[] matchings = null; 

    matchings = tm.ProcessImage(bitmap1, bitmap2); // Exception occurs here! 

    return matchings[0].Similarity; 
} 

Ho anche passato managedImage dal codice di seguito nel metodo, ma dà ancora errore:

UnmanagedImage unmanagedImageA = UnmanagedImage.FromManagedImage(bitmap1); 
Bitmap managedImageA = unmanagedImageA.ToManagedImage(); 
UnmanagedImage unmanagedImageB = UnmanagedImage.FromManagedImage(bitmap2); 
Bitmap managedImageB = unmanagedImageB.ToManagedImage(); 
  1. ho passato in modo casuale le immagini dal mio computer, danno tutte un'eccezione.
  2. Ho passato l'immagine vuota modificata in vernice nel metodo, è comunque un'eccezione.
  3. Inoltre, i formati jpeg, png, bmp, non funzionano.
+0

Possibile duplicato di https://stackoverflow.com/questions/23586979/aforge-image-processing-exception – dbc

risposta

12

Prova ExhaustiveTemplateMatching:

The class implements exhaustive template matching algorithm, which performs complete scan of source image, comparing each pixel with corresponding pixel of template.

The class processes only grayscale 8 bpp and color 24 bpp images.

Quindi, questi sono i formati di immagine è necessario utilizzare.

Come richiesto, da convertire in un formato di pixel specifico, è possibile fare questo:

public static Bitmap ConvertToFormat(this Image image, PixelFormat format) 
{ 
    Bitmap copy = new Bitmap(image.Width, image.Height, format); 
    using (Graphics gr = Graphics.FromImage(copy)) 
    { 
     gr.DrawImage(image, new Rectangle(0, 0, copy.Width, copy.Height)); 
    } 
    return copy; 
} 

L'uno si usa è System.Drawing.Imaging.PixelFormat.Format24bppRgb.

+0

Posso convertire pixel di qualsiasi dimensione – Charlie

+0

Certo, aspetta un secondo. – dbc

+0

provato a convertirlo da qui http://stackoverflow.com/questions/2016406/converting-bitmap-pixelformats-in-c-sharp ma dà un'eccezione dicendo che la grafica non può essere creata dal formato pixel indicizzato – Charlie