save an image as a bitmap without losing quality

2019-01-19 07:45发布

问题:

I had a problem of printing quality and I described it in this link : enter link description here

I tried many different solutions that helped other guys with similar prob but they don't work for me because I have a new prob of saving image as bitmap(with low quality)

finally I decided to ask my current question , because as u see in above link , my prob starts after saving the image in system(96dpi) and restoring it . but I have no way so I'm looking for a way that make it possible to save an image (that has pixels drawn from a graphic) without losing quality.

thanx in advance

回答1:

While 96 dpi is fine for screen display, it is not for printing. For printing you need at least 300 dpi to make it look sharp.

Out of curiosity I created a C# console application that prints a text on a 600 dpi bitmap. I came up with this:

class Program
{
    public static void Main(string[] args)
    {
        const int dotsPerInch = 600;    // define the quality in DPI
        const double widthInInch = 6;   // width of the bitmap in INCH
        const double heightInInch = 1;  // height of the bitmap in INCH

        using (Bitmap bitmap = new Bitmap((int)(widthInInch * dotsPerInch), (int)(heightInInch * dotsPerInch)))
        {
            bitmap.SetResolution(dotsPerInch, dotsPerInch);

            using (Font font = new Font(FontFamily.GenericSansSerif, 0.8f, FontStyle.Bold, GraphicsUnit.Inch))
            using (Brush brush = Brushes.Black)
            using (Graphics graphics = Graphics.FromImage(bitmap))
            {
                graphics.Clear(Color.White);
                graphics.DrawString("Wow, I can C#", font, brush, 2, 2);
            }
            // Save the bitmap
            bitmap.Save("n:\\test.bmp");
            // Print the bitmap
            using (PrintDocument printDocument = new PrintDocument())
            {
                printDocument.PrintPage += (object sender, PrintPageEventArgs e) =>
                {
                    e.Graphics.DrawImage(bitmap, 0, 0);
                };
                printDocument.Print();
            }
        }
    }
}

This is the printed result