Ich habe eine Testanwendung erstellt, die einen Barcode Code 39 generiert. Das Problem ist, dass wenn ich den Barcode auf dem Bildschirm anzeigen, es entweder verwischt oder gerissen wird. Wenn ich einen anderen BitmapScalingMode
als NearestNeighbor
benutze, bekomme ich den unscharfen Barcode. Wenn ich NearestNeighbor
verwende, bekomme ich den diagonalen Schrägstrich wie unten gezeigt. Die Diagonale tritt nur auf, wenn ich die Größe des Fensters ändere. (Es bleibt dort, wenn ich an der richtigen Stelle stoppe.) Das Bild selbst ändert seine Größe nicht, sondern bewegt sich stattdessen über den Bildschirm, wenn ich die Größe des Fensters verändere.Bitmap mit dem nächsten Nachbar Ursachen Tearing
Ich habe versucht, RenderOptions.EdgeMode="Aliased"
auch verwenden, aber es scheint keine Wirkung zu haben ...
Zerrissen/Blurred/Exakt
WPF Beispiel Code:
<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>
Im Alte Generation:
imgBarcode.Source = loadBitmap(c.Generate(barcodeText.Text));
imgBarcode.Width = c.GetWidth();
imgBarcode.Height = c.GetHeight();
Mustergenerierungscode:
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, '*');
}
Beispiel Rechteck Zusatz:
g.FillRectangle(white, left, top, narrow, height);
left += narrow;
Bitmap Laden aus einer anderen Frage Stackoverflow wurde:
[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;
}