我有此代码:
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,但分辨率要低得多。原因是我想显示每个位图直方图,并在同一时间显示图像/框架IT在图片框中自我,但是如果我能够在较低的分辨率中保存它,则保存过程将更快。
由于我想检查直方图,因此在这种情况下,图像/帧是否在低分辨率中显示。
解决方案对保存的图像文件根本没有影响。它是一个参考编号,它指示了创建图像的设备上图像的大小(以英寸为单位)。
当您在具有根本不同分辨率的设备上显示图像时,它至关重要。一个很好的例子是您在计算机上的油漆程序中创建的图像。然后在纸上打印。
在您的油漆程序中,您将创建1600 x 900像素的图像,并填充了笔记本电脑的整个屏幕,所有14英寸。如果然后将其打印在带有600个点分辨率的打印机上,则相同的图像将为1600/600 x 900/600 = 2.7 x 1.5英寸。它变成了纸上的邮票。
为了避免这种情况,图像已被重新缩放,因此在纸上也需要14英寸。图像中的分辨率参考编号允许此重新进行。您的油漆程序记录了显示器的分辨率,例如每英寸120点。当您打印并查看打印机的分辨率为600个点时,您知道您需要将图像打印5倍以使其在纸上的大小相同。要获取图像以节省更快的速度,您需要使其更小。在像素中。位图(图像,大小)构造函数是一种简单的方法。