9
votes

Créer un bitmapsource vide dans c #

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.


0 commentaires

6 Réponses :


14
votes

Utilisez le Créer Méthode.

Exemple volé de MSDN ::) xxx


0 commentaires

15
votes

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);


2 commentaires

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.



1
votes

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;
    }


0 commentaires

5
votes

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));


0 commentaires

3
votes

Le bitmapsource le plus minimal peut être généré comme ceci: xxx


1 commentaires

Cela créera une image visible (c'est-à-dire un pixel noir).



1
votes

Une autre solution consiste à créer une instance d'une classe bitmapimage dérivée de bitmapsource:

bitmapsource videysource = nouveau bitmapimage ();


0 commentaires