在C#中调整图像大小后黑色不完整的内容

时间:2014-12-17 10:00:21

标签: c# image-processing graphics

我正在使用gfx.DrawImage在我的Azure托管网站上生成用户上传图像的缩略图。

每隔一段时间,其中一个缩略图随机包含一个大的黑色部分,几乎就像调整大小被中断并且没有完成一样。如果我再次重新生成相同的图像,它几乎总是在第二次尝试时生成完美(没有黑色部分)。所以这是一个非常随机的问题,只是偶尔发生,不能一致地再现。

以下是一个例子:

原始图片:

http://naturemap.blob.core.windows.net/userimages-splash/30161.jpg

受影响的缩略图:

http://canberranaturemap.org/ImgSrvr?Id=30161&No=1&W=160&MinH=120&MaxH=120

这是我正在使用的代码,99.9%的时间都有效!

Bitmap newImage = new Bitmap(originalImage, FinalWidthPx, HeightPx);

using (Graphics gfx = Graphics.FromImage(newImage))
{
    gfx.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBilinear;
    gfx.DrawImage(originalImage, 0, 0, newImage.Width, newImage.Height);
}

1 个答案:

答案 0 :(得分:0)

我跟着你的主角并设置了一个小负载测试页面,它基本上试图同时请求同一图像的500个动态重新调整版本:)

臂架!!我能够通过刷新页面重复重现该问题。在不同的页面加载上,它每次都会影响不同大小的图像。这帮助我意识到它肯定与负载或资源/争用相关。

然后我查看了我的图像大小调整例程的代码,我非常自豪,因为它经历了多次解析并在需要时智能地裁剪图像,同时还保持正确的比例等。)

我离题了,但每次我在图像上进行另一次裁剪或调整大小操作时,我都会重新保存它并再次从Azure Blob存储服务中重新获取它。因此,对于典型的给定图像,我在重新处理例程期间保存并将图像提取到Azure Blob磁盘,最多说3次。我意识到这肯定会让IO太难了,所以我重新考虑了一些事情并在内存中完成了所有事情,并且只有在图像进入后才能一次性保存回Azure Blob服务。最后的状态。

什么时候没有随机的黑线问题了!全部解决了。

非常感谢Jcl的想法。我应该将此标记为您的答案。