【问题标题】:Is there any way to save a bitmap in a lower resolution then Jpeg ? To change the resolution manual?有没有办法以比 Jpeg 更低的分辨率保存位图?要更改分辨率手册?
【发布时间】:2012-10-30 12:52:53
【问题描述】:

我有这个代码:

int ISampleGrabberCB.BufferCB(double sampleTime, IntPtr pBuffer, int bufferLen)
        {

            if (Form1.ExtractAutomatic == true)
            {
                using (var bitmap = new Bitmap(_width, _height, _width * 3, PixelFormat.Format24bppRgb, pBuffer))
                {
                    if (!this.Secondpass)
                    {
                        long[] HistogramValues = Form1.GetHistogram(bitmap);
                        Form1.Histograms.Add(HistogramValues);
                        long t = Form1.GetTopLumAmount(HistogramValues, 1000);
                        Form1.averagesTest.Add(t);

                    }
                    else
                    {

                        if (_frameId > 0)
                        {
                            double t = Form1.averagesTest[_frameId] / 1000.0 - Form1.averagesTest[_frameId - 1] / 1000.0;
                            w.WriteLine("averagesTest >>>  " + t);
                            if (_frameId == 1049)
                            {
                                w.Close();
                            }
                            if (Form1.averagesTest[_frameId] / 1000.0 - Form1.averagesTest[_frameId - 1] / 1000.0 > 60.0)                                {
                                count = 6;
                            }

                            if (count > 0)
                            {
                                bitmap.RotateFlip(RotateFlipType.Rotate180FlipX);
                                bitmap.Save(Path.Combine(_outFolder, _frameId.ToString("D6") + ".jpg"),ImageFormat.Jpeg);
                                count --;
                            }

在此之前,我将位图保存为位图 .bmp,现在我将其更改为 Jpeg .jpg,但是否可以将 jpg 更改为以较低分辨率保存?也许以某种方式手动更改?

bitmap.Save(Path.Combine(_outFolder, _frameId.ToString("D6") + ".jpg"),ImageFormat.Jpeg);

而不是将其保存为 jpeg 可能会将其保存为 jpeg 但分辨率要低得多。 原因是我想显示每个位图直方图,并同时在图片框中显示它自己的图像/帧,但如果我能够以较低的分辨率保存它,保存过程会更快。

因为我想检查直方图,所以我不介意在这种情况下图像/帧是否会以低分辨率显示。

【问题讨论】:

    标签: c#


    【解决方案1】:

    分辨率对保存的图像文件完全没有影响。它是一个参考数字,它表示图像在创建图像的设备上的大小(以英寸为单位)。

    当您在分辨率完全不同的设备上显示图像时,这一点变得很重要。一个很好的例子是您在机器上的绘图程序中创建的图像。然后在纸上打印。

    在您的绘图程序中,您将创建一个 1600 x 900 像素的图像,它填满了笔记本电脑的整个屏幕,全部 14 英寸。如果您随后在分辨率为 600 点/英寸的打印机上打印它,那么相同的图像将是 1600/600 x 900/600 = 2.7 x 1.5 英寸。它变成了一张纸上的邮票。

    为避免这种情况,图像已重新缩放,因此它在纸上也需要 14 英寸。图像中的分辨率参考编号允许重新缩放。您的绘图程序记录了显示器的分辨率,例如每英寸 120 点。当您打印它并看到打印机具有每英寸 600 点的分辨率时,您知道您需要将图像打印 5 倍才能在纸上获得相同的尺寸。

    要让图像更快地保存,您需要将其缩小。以像素为单位。 Bitmap(Image, Size) 构造函数是一种简单的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-07
      • 1970-01-01
      • 2014-05-31
      相关资源
      最近更新 更多