小毛贼贼 2018-01-20 07:53 采纳率: 100%
浏览 2352
已采纳

wpf打印条形码锯齿的问题

我是做前端的,(lll¬ω¬)!!!,由于.net的工程师离职,遗留下来一个问题,就是wpf打印条形码的时候,出现锯齿的现象。
我也不清楚如何解决,请教wpf的大神,帮忙看下!!!小弟感激不尽。打印机是TSC的
图片说明

下面是.xmal里面的内容,打印的主要内容:

 <Grid>
        <Grid Name="grdLabel" Width="840" Height="260" >
            <Grid.RowDefinitions>
                <RowDefinition Height="0*" />
                <RowDefinition Height="23*" />
                <RowDefinition Height="2*" />
                <RowDefinition Height="5*" />
                <RowDefinition Height="4*" />
                <RowDefinition Height="5*" />
                <RowDefinition Height="5*" />
                <RowDefinition Height="5*" />
                <RowDefinition Height="6*" />
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="0*"/>
                <ColumnDefinition Width="33*"/>
                <ColumnDefinition Width="51*"/>
            </Grid.ColumnDefinitions>

            <Image Grid.Row="1" Grid.Column="1"  Name="imgSN" HorizontalAlignment="Left" Stretch="Uniform" UseLayoutRounding="False"/>
            <StackPanel Orientation="Horizontal" Grid.Row="4" Grid.Column="1" Margin="15,0,0,0">
                <TextBlock Margin="1,0,0,0" FontSize="18" VerticalAlignment="Bottom" Text="产品序列号:" Grid.Column="1" FontWeight="Bold"/>
                <TextBlock Name="tbLabelSN" FontSize="18" VerticalAlignment="Bottom" Grid.Column="1" FontWeight="Bold"/>
            </StackPanel>
            <StackPanel Orientation="Horizontal" Grid.Row="5" Grid.Column="1" Margin="15,0,0,0">
                <TextBlock FontSize="18" VerticalAlignment="Bottom" Text="颜色:" Grid.Column="1" FontWeight="Bold"/>
                <TextBlock FontSize="18" VerticalAlignment="Bottom" Text="{Binding Path=Model.Color.Color,Mode=OneWay}" Grid.Column="3" FontWeight="Bold"/>
            </StackPanel>
            <StackPanel Orientation="Horizontal" Grid.Row="6" Grid.Column="1" Margin="15,0,0,0">
                <TextBlock FontSize="18" VerticalAlignment="Top" Text="型号:" Grid.Column="0" FontWeight="Bold"/>
                <TextBlock FontSize="18" VerticalAlignment="Top" Text="{Binding Path=Model.Name,Mode=OneWay}" Grid.Column="1" FontWeight="Bold"/>

            </StackPanel>
            <StackPanel Orientation="Horizontal" Grid.Row="7" Grid.Column="1" Margin="15,0,0,0">
                <TextBlock FontSize="18" VerticalAlignment="Top" HorizontalAlignment="Right" Text="生产日期:" Grid.Column="2" FontWeight="Bold"/>
                <TextBlock FontSize="18" VerticalAlignment="Top" Text="{Binding Path=BatchDate}" Grid.Column="3" FontWeight="Bold"/>
            </StackPanel>
        </Grid>

下面是打印标签的代码:

             void PrintLabel(string sn)
    {
        System.Drawing.Bitmap m_Bitmap = new System.Drawing.Bitmap(Elecnode.GeneratorBarcode(sn),276*6,94*6);
        //m_Bitmap.Save("./lalalala.png");
        //m_Bitmap.Save("./nidayue.png");
        IntPtr ip = m_Bitmap.GetHbitmap();
        BitmapSource bitmapSource = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
            ip, IntPtr.Zero, Int32Rect.Empty,
            System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());


        DeleteObject(ip);
        imgSN.Source = bitmapSource;
        tbLabelSN.Text = sn;
        grdLabel.UpdateLayout();

        PrintDialog printDialog = new System.Windows.Controls.PrintDialog();
        //var renderTarget = new RenderTargetBitmap((int)grdLabel.Width, (int)grdLabel.Height, 600, 600, PixelFormats.Default);

        var renderTarget = new RenderTargetBitmap(940, 260, 310, 320, PixelFormats.Default);
        renderTarget.SetValue(RenderOptions.BitmapScalingModeProperty, BitmapScalingMode.NearestNeighbor);
        printDialog.PrintTicket = new PrintTicket();
        printDialog.PrintTicket.PageMediaSize = new PageMediaSize(renderTarget.Width, renderTarget.Height);
        var capabilities = printDialog.PrintQueue.GetPrintCapabilities(printDialog.PrintTicket);//0.33502812148481437  0.31995154451847363  0.1599030890369473
        var scale = Math.Max(capabilities.PageImageableArea.ExtentWidth / grdLabel.Width, capabilities.PageImageableArea.ExtentHeight / grdLabel.Height);
        grdLabel.LayoutTransform = new ScaleTransform(scale, scale);
        var sz = new Size(capabilities.PageImageableArea.ExtentWidth, capabilities.PageImageableArea.ExtentHeight);
        grdLabel.Measure(sz);
        grdLabel.Arrange(new Rect(new Point(0, 0), sz));

        printDialog.PrintVisual(grdLabel, "标签打印");

        //isFirstPrint = false;
    }
  • 写回答

1条回答 默认 最新

  • hxycsdn9159 2018-01-20 09:51
    关注

    首先你应该看看生成的条码这个位图有没有锯齿,就是这句代码:
    System.Drawing.Bitmap m_Bitmap = new System.Drawing.Bitmap(Elecnode.GeneratorBarcode(sn),276*6,94*6);
    在这句代码后面先把这个m_Bitmap保存下来看看,这样保存:
    Bitmap.Save(m_Bitmap,"temp.bmp"),
    然后你打开这个temp.bmp看看是不是有锯齿,如果这个位图就有锯齿的话问题就在Elecnode.GeneratorBarcode(sn)这句生成位图的代码中了,
    如果没有锯齿,那么你要打开这个位图看看他存储位图的格式是不是和PixelFormats.Default默认的格式一致,如果不一致就把这个PixelFormats.Default改成和那个位图一致

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 有卷积神经网络识别害虫的项目吗
  • ¥15 数据库数据成问号了,前台查询正常,数据库查询是?号
  • ¥15 算法使用了tf-idf,用手肘图确定k值确定不了,第四轮廓系数又太小才有0.006088746097507285,如何解决?(相关搜索:数据处理)
  • ¥15 彩灯控制电路,会的加我QQ1482956179
  • ¥200 相机拍直接转存到电脑上 立拍立穿无线局域网传
  • ¥15 (关键词-电路设计)
  • ¥15 如何解决MIPS计算是否溢出
  • ¥15 vue中我代理了iframe,iframe却走的是路由,没有显示该显示的网站,这个该如何处理
  • ¥15 操作系统相关算法中while();的含义
  • ¥15 CNVcaller安装后无法找到文件