我创建了一个生成Code 39条形码的测试应用程序.问题是当我在屏幕上显示条形码时,它会模糊或被撕裂.如果我使用BitmapScalingMode其他任何东西NearestNeighbor,我会得到模糊的条形码.当我使用时NearestNeighbor,我得到如下所示的斜线斜线.对角线仅在我调整窗口大小时出现.(如果我停在正确的位置,它会停留在那里.)图像本身不会改变大小,而是在我调整窗口大小时在屏幕上移动.
我也尝试过使用RenderOptions.EdgeMode="Aliased",但它似乎没有任何影响......
撕裂/模糊/正确

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>
Run Code Online (Sandbox Code Playgroud)
图像生成:
imgBarcode.Source = loadBitmap(c.Generate(barcodeText.Text));
imgBarcode.Width = c.GetWidth();
imgBarcode.Height = c.GetHeight();
Run Code Online (Sandbox Code Playgroud)
样本生成代码:
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, '*');
}
Run Code Online (Sandbox Code Playgroud)
样本矩形添加:
g.FillRectangle(white, left, top, narrow, height);
left += narrow;
Run Code Online (Sandbox Code Playgroud)
加载从另一个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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
235 次 |
| 最近记录: |