J'écris une fonction pour obtenir la différence entre deux images bitmap dans Visual Studio 2010. J'ai une fonction qui prend deux images bitmap comme paramètres, j'utilise des bits de déverrouillage pour obtenir des données de chaque pixel, les deux images sont de résolution et de dimensions égales.Comparer deux données d'image en utilisant la méthode dangereuse
Lorsque j'utilise des bits déverrouillage pour une seule image, il fonctionne bien, mais quand je l'utilise pour les deux simultanément dans la même fonction lui donne une exception
REGION BITMAP EST DÉJÀ BLOQUE
Code:
public Bitmap Invert(Bitmap b,Bitmap c)
{
BitmapData bmData =
b.LockBits(new System.Drawing.Rectangle(0, 0, b.Width, b.Height),
ImageLockMode.ReadWrite,
System.Drawing.Imaging.PixelFormat.Format24bppRgb);
int stride = bmData.Stride;
System.IntPtr Scan0 = bmData.Scan0;
// for image 2
BitmapData data2 =
c.LockBits(new System.Drawing.Rectangle(0,
0,
c.Width,
c.Height),
ImageLockMode.ReadWrite,
System.Drawing.Imaging.PixelFormat.Format24bppRgb);
int stride1 = data2.Stride;
System.IntPtr Scan1 = data2.Scan0;
unsafe
{
byte* p = (byte*)(void*)Scan0;
byte* q = (byte*)(void*)Scan1;
nOffset = stride - b.Width * 3;
nWidth = b.Width * 3;
for (y = 0; y < b.Height; ++y)
{
for (x = 0; x < nWidth; ++x)
{
p[0] = (byte)(p[0]-q[0]);
++p;
++q;
}
p += nOffset;
q += nOffset;
}
}
b.UnlockBits(bmData);
c.UnlockBits(data2);
return b;
}
Où se bloque-t-il? –
WPF? Pourquoi ne pas utiliser "WriteableBitmap' au lieu des types' System.Drawing'? –
Dites-nous quel est le résultat de 'object.ReferenceEquals (b, c)' au début de la méthode. –