C# 从HttpPostedFileBase创建的位图保存的图像比最初上载的文件暗

C# 从HttpPostedFileBase创建的位图保存的图像比最初上载的文件暗,c#,.net,asp.net-mvc-5,C#,.net,Asp.net Mvc 5,在我的MVC5Web项目中,我将位图作为表单的一部分保存到服务器上的文件夹中。在保存图像的同时,我还为上传的图像创建了两个大小不同的缩略图。所有三个图像文件都已成功创建,但完整大小的未修改图像将保存为原始图像的“暗显”版本,并作为原始图像使用。所谓“暗显”,我的字面意思是,保存的文件是完整大小和不受干扰的,看起来好像一个50%透明的黑色图像层已保存在原始图像的顶部 以下是将图像保存到磁盘的代码: private ObservationImage CreateObservationImage(Up

在我的MVC5Web项目中,我将位图作为表单的一部分保存到服务器上的文件夹中。在保存图像的同时,我还为上传的图像创建了两个大小不同的缩略图。所有三个图像文件都已成功创建,但完整大小的未修改图像将保存为原始图像的“暗显”版本,并作为原始图像使用。所谓“暗显”,我的字面意思是,保存的文件是完整大小和不受干扰的,看起来好像一个50%透明的黑色图像层已保存在原始图像的顶部

以下是将图像保存到磁盘的代码:

private ObservationImage CreateObservationImage(UploadedFileInfo file, Observation obs)
    {
        Guid guid = Guid.NewGuid();
        string p = Path.Combine(Server.MapPath("~/ObservationImages/"), guid.ToString() + ".png");
        string thumb = Path.Combine(Server.MapPath("~/ObservationImages/thumbnails/"), guid.ToString() + ".png");
        string mid = Path.Combine(Server.MapPath("~/ObservationImages/midsize/"), guid.ToString() + ".png");
        Bitmap thisBitmap = new Bitmap(file.File.InputStream);

        ImageCodecInfo codecInfo = GetEncoderInfo("image/png");
        Encoder qualityEncoder = Encoder.Quality;
        Encoder colourDepthEncoder = Encoder.ColorDepth;
        Encoder compressionEncoder = Encoder.Compression;
        EncoderParameters myEncoderParameters = new EncoderParameters(3);
        EncoderParameter myQualityEncoderParameter = new EncoderParameter(qualityEncoder, 100L); // 100% quality
        EncoderParameter myColourDepthEncoderParameter = new EncoderParameter(colourDepthEncoder, 24L); // 24 bpp
        EncoderParameter myCompressionEncoderParameter = new EncoderParameter(compressionEncoder, (long)EncoderValue.CompressionNone); // no compression
        myEncoderParameters.Param[0] = myQualityEncoderParameter;
        myEncoderParameters.Param[1] = myColourDepthEncoderParameter;
        myEncoderParameters.Param[2] = myCompressionEncoderParameter;

        double ratio = (double)thisBitmap.Height / (double)thisBitmap.Width;
        Image.GetThumbnailImageAbort myCallback = new Image.GetThumbnailImageAbort(ThumbnailCallback);
        Image thisThumbnail = thisBitmap.GetThumbnailImage(120, (int)(120 * ratio), myCallback, IntPtr.Zero);
        thisThumbnail.Save(thumb, codecInfo, myEncoderParameters);

        myCallback = new Image.GetThumbnailImageAbort(ThumbnailCallback);
        Image thisMidsize = thisBitmap.GetThumbnailImage(400, (int)(400 * ratio), myCallback, IntPtr.Zero);
        thisMidsize.Save(mid);

        thisBitmap.Save(p, codecInfo, myEncoderParameters);

        ObservationImage result = new ObservationImage
        {
            ImageLocalPath = p,
            ImageURL = "/ObservationImages/" + guid.ToString() + ".png",
            ThumbnailURL = "/ObservationImages/thumbnails/" + guid.ToString() + ".png",
            MidSizeUrl = "/ObservationImages/midsize/" + guid.ToString() + ".png",
            ObservationId = obs.ObservationId
        };
        return result;
    }
UploadedFileInfo类型来自一个自定义模型绑定器,该绑定器提供对上传文件的HttpPostedFileBase的访问。thisThumbnail和thisMidsize文件按其应有的方式绝对保存,thisBitmap按说明保存

现在,所有这些在VS2013使用的开发web服务器上都可以正常工作,但是当部署到IIS7.5服务器时,就会出现“暗显”映像的问题。我尝试过强制使用我能想到的每个编码器参数,但没有效果。保存缩略图时不会产生任何不良影响

有些文件确实上传正确,但我看不出有任何关联——例如,原始文件类型和大小似乎没有暴露问题。这真让我挠头,想知道发生了什么事。IIS盒(Windows Server 2008 R2)上没有异常设置,如前所述,它在我的开发机器(Windows 7 x64)上运行的VS2013上100%的时间都能正常工作


有人知道我应该在哪里看吗?

在本例中,位图。保存是将“未更改”的图像保存为48bpp,而不是原来的32bpp。我不得不强制将其设置为32,但我需要使用许多具有不同位深度的其他映像进行测试。

您的开发机器和服务器的操作系统版本是什么?还有更多与
系统、绘图、成像等相关的问题。尝试找到有问题的设置并调整参数,直到有一个小示例再现该问题。服务器是Windows server 2008 R2,开发机器是Windows 7 x64-使用信息更新问题。使用与拇指相同的编码器参数保存完整大小的图像没有任何区别-我甚至尝试使用GetThumbnail方法生成与原始缩略图大小完全相同且仍为灰色的缩略图。尝试设置所有我能想到的编码器参数,结果也是一样的。