¿Cuál es la forma más rápida (pocas líneas de código y bajo uso de recursos) de crear una instancia vacía (0x0 px o 1x1 px y completamente transparente) BitmapSource en C# que se utiliza cuando no representa nada.crear un BitmapSource vacío en C#
8
A
Respuesta
10
Utilice el método Create.
Ejemplo robado de MSDN: :)
int width = 128;
int height = width;
int stride = width/8;
byte[] pixels = new byte[height*stride];
// Try creating a new image with a custom palette.
List<System.Windows.Media.Color> colors = new List<System.Windows.Media.Color>();
colors.Add(System.Windows.Media.Colors.Red);
colors.Add(System.Windows.Media.Colors.Blue);
colors.Add(System.Windows.Media.Colors.Green);
BitmapPalette myPalette = new BitmapPalette(colors);
// Creates a new empty image with the pre-defined palette
BitmapSource image = BitmapSource.Create(
width, height,
96, 96,
PixelFormats.Indexed1,
myPalette,
pixels,
stride);
13
Gracias a Arcutus hint que tienen esta ahora (wich funciona 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);
Si hago esta imagen más pequeña consigo un ArgumentException. No tengo idea de por qué no puedo crear una imagen más pequeña que 2x2px.
0
Eche un vistazo a esto. Funciona para cualquier 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;
}
3
La manera de crear una imagen así sin asignar una gran matriz de bytes conseguido es utilizar TransformedBitmap
.
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));
Cuestiones relacionadas
- 1. C# WPF BitmapSource ¿Fuga de memoria?
- 2. Crear un Drawable vacío en Android
- 3. Crear un archivo csv vacío en R
- 4. No puedo presionar para crear un repositorio vacío en Windows
- 5. BitmapSource del archivo
- 6. ¿Cómo puedo crear un HttpResponse maniquí vacío
- 7. ¿Crear un archivo vacío para escribir?
- 8. Forma correcta de desechar un BitmapSource
- 9. BitmapSource a BitmapImage
- 10. Cómo declarar un puntero vacío en C#
- 11. Comprobación de un archivo vacío en C++
- 12. punteros vacío en C++
- 13. Cómo crear una sucursal en un repositorio vacío en Git
- 14. Crear archivo vacío usando python
- 15. WPF render rendimiento con BitmapSource
- 16. Problema WPF/BackgroundWorker y BitmapSource
- 17. Copiando de BitmapSource a WritableBitmap
- 18. ¿Puedo crear un diagrama de ggplot2 vacío en R?
- 19. Cómo crear un diccionario vacío para argumento opcional en VB.NET
- 20. La mejor manera de crear un mapa vacío en Java
- 21. Puntero a vacío en C++?
- 22. ¿Qué significa (vacío **) en C?
- 23. ¿Cómo crear un delegado vacío usando Expression Trees?
- 24. ¿Cómo creo un archivo vacío en emacs?
- 25. Cómo crear un vector R vacío para agregar nuevos elementos
- 26. Cómo crear instancias de un elemento vacío con JAXB
- 27. Ir equivalente a un puntero de vacío en C
- 28. ¿Es vacío un tipo de datos en C?
- 29. Compruebe si un directorio está vacío usando C en Linux
- 30. Creación de un NSArray vacío
Puede hacerlo, usando un formato diferente (los formatos indexados son más peculiares, pero tampoco sé la razón exacta). Por ejemplo: BitmapSource.Create (1, 1, 96, 96, PixelFormats.Bgra32, null, nuevo byte [] {0, 0, 0, 0}, 4) (en este ejemplo, el paso grande es cuatro porque hay cuatro bytes por píxel en Bgra32, y los cuatro bytes en la matriz describen el píxel). editar: En realidad, creo que su ejemplo debería funcionar también, si acorta la matriz de bytes a un elemento para un píxel. –
usando sus parámetros (1, 1, 96, 96, PixelFormats.Bgra32, nulo, nuevo byte [] {0, 0, 0, 0}, 4) evitará que toda la interfaz de usuario de WPF se renderice. – bitbonk