2014-01-31 4 views
6

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

Torn Barcode Blurred Barcode Correct Barcode

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

Antwort

2

Einstellungauf Ihrem Hauptfenster sollte dieses Problem lösen.

Verwandte Themen