1

このコードを試して、画像のサイズを変更します。

 ConvertToBitmap(txtImage.Text);

    private void ConvertToBitmap(string filename)
    {
        if (File.Exists(filename))
        {
            var origImg = System.Drawing.Image.FromFile(filename);
            var widthDivisor = (double)origImg.Width / (double)900;
            var heightDivisor = (double)origImg.Height / (double)750;
            int newWidth, newHeight;

            if (widthDivisor < heightDivisor)
            {
                newWidth = (int)((double)origImg.Width / widthDivisor);
                newHeight = (int)((double)origImg.Height / widthDivisor);
            }
            else
            {
                newWidth = (int)((double)origImg.Width / heightDivisor);
                newHeight = (int)((double)origImg.Height / heightDivisor);
            }

            var newImg = new Bitmap(newWidth, newHeight);
            Graphics g = Graphics.FromImage(newImg);
            g.DrawImage(origImg, new Rectangle(0, 0, newWidth, newHeight));
            System.Drawing.Imaging.EncoderParameters encoderParameters = new System.Drawing.Imaging.EncoderParameters(1);
            encoderParameters.Param[0] = new System.Drawing.Imaging.EncoderParameter(System.Drawing.Imaging.Encoder.Quality, (long)350);
            newImg.Save(fullpath, GetImageCodeInfo("image/jpeg"), encoderParameters);
            g.Dispose();
        }
    }

    public static ImageCodecInfo GetImageCodeInfo(string mimeType)
    {
        ImageCodecInfo[] info = ImageCodecInfo.GetImageEncoders();
        foreach (ImageCodecInfo ici in info)
            if (ici.MimeType.Equals(mimeType, StringComparison.OrdinalIgnoreCase))
                return ici;
        return null;
    }

    private ImageCodecInfo GetEncoder(ImageFormat format)
    {

        ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders();

        foreach (ImageCodecInfo codec in codecs)
        {
            if (codec.FormatID == format.Guid)
            {
                return codec;
            }
        }
        return null;
    }

画像のサイズを変更しますが、エラーが表示されますa generic error occurred in gdi+。どんな余分な努力も歓迎します。

4

2 に答える 2

1

フォルダにセキュリティの完全なアクセス許可を与えると、それは非常にうまく機能します

于 2012-07-12T07:05:42.060 に答える
0

エラーが発生した場合は、プライベートメモリの使用量に注意してください。この問題は、メモリリークが原因でも発生する可能性があります。

コードは、使用後に適切に配置する必要のあるグラフィックやその他の描画オブジェクトを処理しているようです。

このメソッドをループで実行して、メモリ消費量が大幅に増加しているかどうかを確認します。はいの場合、メモリリークが発生しているため、使用後に廃棄されていないオブジェクトを見つけるために深く掘り下げる必要があります。

于 2012-07-12T08:39:01.447 に答える