0

我有这个代码:

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 但分辨率要低得多。原因是我想显示每个位图直方图,并同时在图片框中显示它自己的图像/帧,但是如果我能够以较低的分辨率保存它,那么保存过程会更快。

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

4

1 回答 1

3

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

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

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

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

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

于 2012-10-30T13:08:40.267 回答