2

実行時の画像サイズ変更には .net dll (http://imageresizing.net/download) を使用しています。それは完全に機能します。ただし、しばらくしてから (1 ~ 7 日の間)、システムが偶数ビューアーで例外を発生させ始めたことが発生します。

例外情報: 例外の種類: OutOfMemoryException 例外メッセージ: プログラムの実行を続行するにはメモリが不足しています。

そして、その例外の後、Web サイトは通常、「System.OutOfMemoryException」をスローするエラーで動作を停止します。

また、Web サイトが実行されているアプリケーション プールを「リサイクル」すると、問題が解消され、コードを変更しなくても Web サイトはすぐに通常の状態に戻ります。

dll を imagereiszing する前に、カスタム コードを使用していましたが、同じ問題が発生しました。以下はコードです。

    private Bitmap ConvertImage(Bitmap input, int width, int height, bool arc)
    {
        if (input.PixelFormat == PixelFormat.Format1bppIndexed ||
            input.PixelFormat == PixelFormat.Format4bppIndexed ||
            input.PixelFormat == PixelFormat.Format8bppIndexed)
        {

            Bitmap unpackedBitmap = new Bitmap(input.Width, input.Height);
            Graphics g = Graphics.FromImage(unpackedBitmap);
            g.Clear(Color.White);
            g.DrawImage(input, new Rectangle(0,0,input.Width, input.Height));
            g.Dispose();
            input = unpackedBitmap;
        }


        double aspectRatio = (double)input.Height / (double)input.Width;
        int actualHeight = CommonMethods.GetIntValue(Math.Round(aspectRatio * width, 0));


        Bitmap _imgOut;

        if (actualHeight > height)
        {
            ResizeImage resizeImage = new ResizeImage(width, actualHeight, InterpolationMethod.Bicubic);
            Bitmap _tempBitmap = resizeImage.Apply(input);

            Bitmap _croppedBitmap = new Bitmap(width, height);
            Graphics _crop = Graphics.FromImage(_croppedBitmap);
            _crop.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
            _crop.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
            _crop.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
            _crop.DrawImageUnscaledAndClipped(_tempBitmap, new Rectangle(0, 0, width, height));
            _crop.Dispose();

            _imgOut = _croppedBitmap;
        }
        else
        {
            ResizeImage resizeImage = new ResizeImage(width, height, InterpolationMethod.Bicubic);
            _imgOut = resizeImage.Apply(input);
        }

        // Draw the arc if it has been requested
        if (arc)
        {
            Graphics _arc = Graphics.FromImage(_imgOut);
            _arc.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
            _arc.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
            _arc.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
            _arc.DrawArc(new Pen(Color.White, 24), new Rectangle(-13, -13, 50, 50), 180, 90);
            _arc.Dispose();
        }

        // job done
        return _imgOut;
    }

次のように画像のサイズを変更しています: www.mysite.com/images/myimage.jpg?width=196&height=131

楽しみにしている。ファルク

4

1 に答える 1