c# - tres - decimal a binario
Mapa de bits con el vecino más próximo Causa rasgado (1)
Creé una aplicación de prueba que genera un código de barras Code 39. El problema es que cuando muestro el código de barras en la pantalla, se desenfoca o se desgarra. Si uso cualquier BitmapScalingMode
distinto de NearestNeighbor
, obtengo el código de barras borroso. Cuando uso NearestNeighbor
, obtengo la barra diagonal como se muestra a continuación. La diagonal solo ocurre cuando cambio el tamaño de la ventana. (Permanece allí si me detengo en el lugar correcto). La imagen en sí no cambia de tamaño, sino que se mueve a través de la pantalla a medida que cambio el tamaño de la ventana.
He intentado usar RenderOptions.EdgeMode="Aliased"
también, pero no parece tener ningún efecto ...
Desgarrado / borroso / correcto
Código de muestra de WPF:
<Border BorderBrush="Black" BorderThickness="1" HorizontalAlignment="Center" VerticalAlignment="Top" Margin="0,50,0,0">
<Image x:Name="imgBarcode" Stretch="Fill" RenderOptions.BitmapScalingMode="HighQuality" RenderOptions.EdgeMode="Aliased" />
</Border>
Generación de imagen:
imgBarcode.Source = loadBitmap(c.Generate(barcodeText.Text));
imgBarcode.Width = c.GetWidth();
imgBarcode.Height = c.GetHeight();
Código de generación de muestra:
Bitmap bmp = new Bitmap(width, height);
using (Graphics gfx = Graphics.FromImage(bmp))
using (SolidBrush black = new SolidBrush(Color.Black))
using (SolidBrush white = new SolidBrush(Color.White))
{
// Start the barcode:
addBar(gfx, black, white, ''*'');
foreach (char c in barcode)
{
addCharacter(gfx, black, white, c);
}
// End the barcode:
addBar(gfx, black, white, ''*'');
}
Ejemplo de adición de rectángulo:
g.FillRectangle(white, left, top, narrow, height);
left += narrow;
Cargar mapa de bits tomado de otra pregunta de StackOverflow:
[DllImport("gdi32")]
static extern int DeleteObject(IntPtr o);
public static BitmapSource loadBitmap(System.Drawing.Bitmap source)
{
IntPtr ip = source.GetHbitmap();
BitmapSource bs = null;
try
{
bs = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(ip,
IntPtr.Zero, Int32Rect.Empty,
System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());
}
finally
{
DeleteObject(ip);
}
return bs;
}
Establecer UseLayoutRounding="True"
en su ventana principal debería resolver este problema.