【问题标题】:Best resize and or crop logic最佳调整大小和/或裁剪逻辑
【发布时间】:2010-12-10 05:26:58
【问题描述】:

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

我的在下面。从 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) {
        ResizeWidth = TargetHeight / SourceHeight * SourceWidth;
    }
    else 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
}

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

【问题讨论】:

    标签: c# resize logic crop


    【解决方案1】:

    我想说您应该使用标准几何类型,例如 RectangleSize。那么您可能还应该支持一个用例,当调用者希望将图像放入某个更大的矩形中,但仍希望保持原始图像大小比例。

    一种实现大小调整的方法,您可以找到here

    【讨论】:

      【解决方案2】:

      这可能比您需要的要复杂一些,但对于一些高级裁剪技术的示例,check this out

      【讨论】:

        猜你喜欢
        • 2018-09-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-03
        • 1970-01-01
        • 2011-06-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多