C# 将图片保存到硬盘

C# 将图片保存到硬盘,c#,image,exception,invalid-argument,C#,Image,Exception,Invalid Argument,我正在尝试调整图片的大小并确保其安全。我做了一些研究,并试图使某些功能正常工作。几乎每件事都能工作,但保存给我一个无效参数例外。 这就是我所拥有的: private void ResizeImage(Image image) { int maxWidth = 100; int maxHeight = 100; int imageWidth = image.Size.Width; int imageHeight

我正在尝试调整图片的大小并确保其安全。我做了一些研究,并试图使某些功能正常工作。几乎每件事都能工作,但保存给我一个无效参数例外。 这就是我所拥有的:

     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;
    }
private void ResizeImage(图像)
{
int maxWidth=100;
int maxHeight=100;
int imageWidth=image.Size.Width;
int imageHeight=image.Size.Height;
double maxRatio=(double)maxWidth/(double)maxHeight;
双皮比=(双)图像宽度/(双)图像高度;
Image newImage=null;
如果(最大比率>微微比率和图像宽度>最大宽度)
{
newImage=新位图(图像,新系统.Drawing.Size(Convert.ToInt32(maxWidth/picRatio),maxHeight));
}
else if(maxRatiomaxHeight)
{
newImage=新位图(图像,新系统.Drawing.Size(maxWidth,Convert.ToInt32(maxHeight/picRatio));
}
//用于图像质量的编码器参数
EncoderParameter qualityParam=新的EncoderParameter(系统、绘图、成像、编码器、质量,1);
//Jpeg图像编解码器
ImageCodecInfo jpegodec=this.getEncoderInfo(“图像/jpeg”);
如果(JPEG编解码器!=null){
EncoderParameters encoderParams=新的EncoderParameters(1);
encoderParams.Param[0]=qualityParam;
newImage.Save(@“.\temp\pdf\photos\test.jpg”,JPEG编解码器,编码器参数);
}   
}
私有ImageCodeInfo getEncoderInfo(字符串mimeType)
{
//获取所有图像格式的图像编解码器
ImageCodecInfo[]codecs=ImageCodecInfo.GetImageEncoders();
//找到正确的图像编解码器
对于(int i=0;i
但当我尝试运行它时,它在newImage.save()上给我一个无效参数异常。根据,编码器质量参数应该是64位(长)值。更改此行:

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

根据,编码器质量参数应为64位(长)值。更改此行:

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


thx,它的工作,但质量。是的,那是另一个story@jorne:我认为1L会很糟糕,因为100L是最好的质量(最少的压缩)。是的,刚刚发现。加油站的坦克1!thx,它的工作,但质量。是的,那是另一个story@jorne:我认为1L会很糟糕,因为100L是最好的质量(最少的压缩)。是的,刚刚发现。加油站的坦克1!您应该设置max-width和max-height参数,并在默认情况下将它们设置为100,因为从外部看,没有人会想到它。您应该设置max-width和max-height参数,并在默认情况下将它们设置为100,因为从外部看,没有人会想到它。