1

これはコードです:

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);
                            double tt = framesCounts();
                            if (_frameId == framesCounts())
                            {
                                w.Close();
                            }
                            if (Form1.averagesTest[_frameId] / 1000.0 - Form1.averagesTest[_frameId - 1] / 1000.0 > 0.0) 
                            {
                                count = 6;
                            }

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

そして、ResizeBitmapは次のとおりです。

public static Bitmap ResizeBitmap(Bitmap b, int nWidth, int nHeight)
        {
            Bitmap result = new Bitmap(nWidth, nHeight);
            using (Graphics g = Graphics.FromImage((Image)result))
                g.DrawImage(b, 0, 0, nWidth, nHeight);
            return result;
        }

ハードディスク上のファイルが10X10ではなく1920X1080であるのはなぜですか?そして、なぜ節約がとても遅いのですか?この場合、ファイルをハードディスクに保存すると、約2600フレームが高速になるはずだと思いました。

誰かが私のコードに従ってそれを修正する方法を教えてもらえますか?

ありがとう。

4

3 に答える 3

3

そのはず

bitmap = ResizeBitmap(bitmap, 10, 10);

サイズ変更されたビットマップを何にも割り当てていません。

于 2012-10-30T23:31:51.453 に答える
0

メソッドはビットマップを返すため、メソッドの戻り値を使用する必要があります。

Bitmap newBitmap = ResizeBitmap(bitmap, 10, 10);

ここと同じ答え:この関数でビットマップのサイズを変更するにはどうすればよいですか?

于 2012-10-30T23:32:36.180 に答える
0

これを最初のコードサンプルの下部近くで使用します。

using (Bitmap resized_bmp = ResizeBitmap(bitmap, 10, 10))
{
    resized_bmp.RotateFlip(RotateFlipType.Rotate180FlipX);
    resized_bmp.Save(Path.Combine(_outFolder, _frameId.ToString("D6") + ".bmp"),ImageFormat.Bmp);
    count --;
}

Timが提案したように、これは保存を実行するために新しいBitmap変数を使用します(そしてそれを適切に破棄します)。

于 2012-10-30T23:40:01.267 に答える