Cela devrait fonctionner correctement avec LockBits/BitmapData, si vous utilisez un format de pixel 32bpp [P] ARGB. L'astuce est que vous devrez copier les données une ligne à la fois afin qu'elle s'aligne aux bons endroits. Vous devriez être en mesure de le faire en utilisant quelque chose comme:
Rectangle srcArea = new Rectangle(0, 0, srcBitmap.Width, srcBitmap.Height);
BitmapData srcData = srcBitmap.LockBits(srcArea, ImageLockMode.ReadOnly, destBitmap.PixelFormat);
Rectangle destArea = new Rectangle(25, 25, srcBitmap.Width, srcBitmap.Height);
BitmapData destData = destBitmap.LockBits(destArea, ImageLockMode.WriteOnly, destBitmap.PixelFormat);
IntPtr srcPtr = srcData.Scan0;
IntPtr destPtr = destData.Scan0;
byte[] buffer = new byte[srcData.Stride];
for (int i = 0; i < srcData.Height; ++i)
{
Marshal.Copy(srcPtr, buffer, 0, buffer.Length);
Marshal.Copy(buffer, 0, destPtr, buffer.Length);
srcPtr += srcData.Stride;
destPtr += destData.Stride;
}
srcBitmap.UnlockBits(srcData);
destBitmap.UnlockBits(destData);
En guise d'avertissement, ce code ne fonctionnera pas parce que je ne suis pas sûr de ce que les bonnes incantations sont pour incrémenter de IntPtr. J'ai déjà fait ce genre de chose auparavant, mais en C++. En outre, je ne sais pas s'il existe un moyen de copier directement les données au lieu d'utiliser un tampon intermédiaire.
Une mise en garde supplémentaire: l'appel LockBits srcBitmap et le dimensionnement du tampon supposent que srcBitmap sera complètement inclus dans destBitmap. Si ce n'est pas le cas (une partie de l'image bitmap sera coupée), la zone verrouillée et la taille du tampon devront être ajustées. Si vous n'utilisez pas un format de pixel 32bpp (c'est-à-dire 24bpp), ce sera plus difficile. La foulée de votre source BitmapData peut inclure une certaine quantité de remplissage qui ne doit pas être copiée. Vous pouvez contourner ce problème en calculant la quantité de données de pixels réelles dans une ligne source et en copiant cette quantité. Les formats de pixels indexés seraient encore plus de travail.
Une suite? Je répète la même question. – Guffa
C'est une question plus ciblée et jusqu'à présent, je reçois des réponses plus ciblées. –