最佳resize和/或裁剪逻辑

我曾经遇到过这几次,并认为把它放在那里会很好。 什么是你最好的图像resize和/或裁剪逻辑。 想法是使用目标图像,尺寸和裁剪标记调用某些方法 – 这将返回或保存或任何所需图像。

我的下面。 从VB转换为C#所以是的,会有小错误,但逻辑是我们正在看的。

// INIT // On/off bool WeAreCropping = true; // Get some dimensions int TargetWidth = RequestedWidth; int TargetHeight = RequestedHeight; int SourceWidth = SourceImage.Width; int SourceHeight = SourceImage.Height; int ResizeWidth = TargetWidth; int ResizeHeight = TargetHeight; // GET RESIZE VALUES // Are we cropping? if (WeAreCropping) { // Get source and target aspect ratio double SourceAspectRatio = SourceWidth / SourceHeight; double TargetAspectRatio = TargetWidth / TargetHeight; // Compare aspect ratios to find out if we should we resize by // width or height or nothing if (TargetAspectRatio  SourceAspectRatio) { ResizeHeight = TargetWidth / SourceWidth * SourceHeight; } else { // Same aspect ratio } } else { // If the target image is bigger than the source if (TargetWidth > SourceWidth && TargetHeight > SourceHeight) { TargetWidth = SourceWidth; TargetHeight = SourceHeight; } double Ratio = 0; // What ratio should we resize it by if (SourceWidth / TargetWidth > SourceHeight / TargetHeight) { Ratio = SourceWidth / TargetWidth; } else { Ratio = SourceHeight / TargetHeight; } ResizeWidth = Math.Ceiling(SourceWidth / Ratio); ResizeHeight = Math.Ceiling(SourceHeight / Ratio); } // TIME TO DO SUMFINK // Resize the image using ResizeWidth and ResizeHeight // Do it if (WeAreCropping) { // Crop the resized image at the center TargetWidth and TargetHeight // Do it } 

我怀疑这可能会更优雅,所以也许你可以做得更好。

我会说你应该使用像RectangleSize这样的标准几何类型。 那么你应该也支持一个用例,当调用者想要将图像放在一个更大的矩形中时,但仍然希望保持原始图像大小比例。

您可以在此处找到实现resize的一种方法。

这可能比你需要的更多一些,但是对于一些高级裁剪技术的例子, 请检查一下 。