Quel est le moyen le plus rapide (peu de lignes de code et d'utilisation de la ressource faible) de créer un fichier vide (0x0 px ou 1x1 px et entièrement transparent) Bitmapsource instance en C # utilisé lorsque rien ne devrait être rendu. P>
6 Réponses :
Merci à Art Arcutus J'ai ceci maintenant ( Wich fonctionne bien):
var i = BitmapImage.Create( 2, 2, 96, 96, PixelFormats.Indexed1, new BitmapPalette(new List<Color> { Colors.Transparent }), new byte[] { 0, 0, 0, 0 }, 1);
Vous pouvez, en utilisant un format différent (les formats indexés sont plus particuliers, mais je ne connais pas la raison exacte non plus). Par exemple: bitmapsource.create (1, 1, 96, 96, pixelformats.bgra32, null, nouvel octet [] {0, 0, 0, 0}, 4) (Dans cet exemple, la foulée est quatre parce qu'il y a quatre octets par pixel à BGRA32 et les quatre octets de la matrice décrivent le pixel). EDIT: En fait, je pense que votre exemple devrait fonctionner aussi, si vous raccourcissez le tableau d'octets sur un élément pour un pixel.
Utilisation de vos paramètres (1, 1, 96, 96, PixelFormats.bgra32, null, nouvel octet [] {0, 0, 0, 0}, 4) empêchera toute l'interface utilisateur du WPF de rendu.
Juste jeter un coup d'oeil à cela. Cela fonctionne pour n'importe quel PixelFormat
public static BitmapSource CreateEmtpyBitmapSource(int width, int height, PixelFormat pixelFormat) { PixelFormat pf = pixelFormat; int rawStride = (width * pf.BitsPerPixel + 7) / 8; var rawImage = new byte[rawStride * height]; var bitmap = BitmapSource.Create(width, height, 96, 96, pf, null, rawImage, rawStride); return bitmap; }
Le moyen de créer une telle image sans attribuer un gros réseau d'octet géré est d'utiliser transformedbitmap code>.
var bmptmp = BitmapSource.Create(1,1,96,96,PixelFormats.Bgr24,null,new byte[3]{0,0,0},3);
var imgcreated = new TransformedBitmap(bmptmp, new ScaleTransform(width, height));
Le bitmapsource le plus minimal peut être généré comme ceci:
Cela créera une image visible (c'est-à-dire un pixel noir).
Une autre solution consiste à créer une instance d'une classe bitmapimage dérivée de bitmapsource: p>
bitmapsource videysource = nouveau bitmapimage (); code> p>