Вопрос

Я пытаюсь изменить размер и безопасную картинку, которую я проделал некоторые исследования и пытался получить тому-то работу.Почти все работает, но сэкономление Gaves Me неверный исключений аргумента. Это то, что у меня есть:

     private void ResizeImage(Image image) 
     {
        int maxWidth = 100;
        int maxHeight = 100;
        int imageWidth = image.Size.Width;
        int imageHeight = image.Size.Height;

        double maxRatio = (double)maxWidth / (double)maxHeight;
        double picRatio = (double)imageWidth / (double)imageHeight;

        Image newImage = null;
        if (maxRatio > picRatio && imageWidth > maxWidth) 
        {
            newImage  = new Bitmap(image, new System.Drawing.Size(Convert.ToInt32(maxWidth / picRatio), maxHeight));            
        }
        else if (maxRatio < picRatio && imageHeight > maxHeight) 
        {
            newImage = new Bitmap(image, new System.Drawing.Size(maxWidth, Convert.ToInt32(maxHeight / picRatio)));         
        }

         // Encoder parameter for image quality
        EncoderParameter qualityParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality,1);

        // Jpeg image codec
        ImageCodecInfo jpegCodec = this.getEncoderInfo("image/jpeg");

        if(jpegCodec != null){
            EncoderParameters encoderParams = new EncoderParameters(1);
            encoderParams.Param[0] = qualityParam;
            newImage.Save(@".\temp\pdf\photos\test.jpg",jpegCodec,encoderParams);
        }   
    }

    private ImageCodecInfo getEncoderInfo(string mimeType) 
    {
        // Get image codecs for all image formats
        ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();

        // Find the correct image codec
        for (int i = 0; i < codecs.Length; i++) 
        {
            if (codecs[i].MimeType == mimeType) 
            {
                return codecs[i];
            }
        }
        return null;
    }
.

Но когда я пытаюсь запустить его, это дает мне неверный исключений аргумента на NewImage.save ()

Это было полезно?

Решение

Согласно msdn , параметр качества кодировщика должен быть 64-Битовое (длинное) значение.Изменить эту строку:

var qualityParam = new EncoderParameter(Encoder.Quality, 1);
.

к

var qualityParam = new EncoderParameter(Encoder.Quality, 1L);
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top