Comment créer un Bitmap copie en profondeur
Je fais face à des images dans ma demande et à certaines fins, j'ai besoin de créer une copie de l'image Bitmap. Est-il un moyen élégant de comment le faire?
J'ai essayé
Bitmap deepCopy = original.Clone();
,eh bien, apparemment ce n'est pas de créer une copie en profondeur, mais peu profonde.
Ma prochaine tentative de créer une nouvelle image Bitmap
Bitmap deepCopy = new Bitmap(original);
Malheureusement, ce constructeur est Bitmap(Image), pas en mode point(Bitmap) et Bitmap(Image) va convertir ma belle 8bppIndexed Pixelformat dans un autre.
Une autre tentative a été à l'utilisation d'un MemoryStream
public static Bitmap CreateBitmapDeepCopy(Bitmap source)
{
Bitmap result;
using (MemoryStream stream = new MemoryStream())
{
source.Save(stream, ImageFormat.Bmp);
stream.Seek(0, SeekOrigin.Begin);
result = new Bitmap(stream);
}
return result;
}
Bien, cela ne fonctionne pas non plus, puisque le MemoryStream doit être ouvert pendant toute la durée de vie de Bitmap.
Donc, j'ai résumé toutes mes deadends et j'aimerais vraiment voir une belle manière élégante de la création d'un Bitmap copie en profondeur. Merci pour ça 🙂
Vous devez vous connecter pour publier un commentaire.
Vous pourriez sérialiser l'image et ensuite désérialiser. Bitmap est sérialisable.
Une autre façon je suis tombé sur qui réalise la même chose, c'est pour faire pivoter ou retourner l'image. Sous le capot qui semble créer une toute nouvelle copie de l'image bitmap. Faire deux rotations ou les flips vous permet de vous retrouver avec une copie exacte de l'image d'origine.
Supposons que vous avez déjà une image bitmap appelé original avec quelque chose
Cela devrait créer une copie de la même taille, et de dessiner à l'original sur la copie.