1

嗨,在以下两种情况下,哪一种是最好的代码。

您可以看到我PercentW在案例 1 中创建了变量。但在案例 2 中,我只是在更新NewWidth

情况1:

public static Image ResizeByWidth(Image Img, float NewWidth)
{
    float PercentW = ((float)Img.Width / (float)NewWidth);

    Bitmap bmp = new Bitmap(PercentW, (int)(Img.Height / PercentW));
    Graphics g = Graphics.FromImage(bmp);

    g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
    g.DrawImage(Img, 0, 0, bmp.Width, bmp.Height);
    g.Dispose();

    return bmp;
}

案例二:

public static Image ResizeByWidth(Image Img, float NewWidth)
{
    NewWidth = ((float)Img.Width / (float)NewWidth);

    Bitmap bmp = new Bitmap(NewWidth, (int)(Img.Height / NewWidth));
    Graphics g = Graphics.FromImage(bmp);

    g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
    g.DrawImage(Img, 0, 0, bmp.Width, bmp.Height);
    g.Dispose();

    return bmp;
}

谢谢

4

3 回答 3

1

为了清楚起见,第一种方法。您不应该为了边际性能提升而牺牲可读性。(也就是说,如果有任何实际收益的话。)

唯一可能违反这一点的情况是,当您有非常令人信服的理由并得到实际性能测量的支持时,另一种方法的性能好得多。也就是说,当坚持第一种方法时,您实际上会注意到执行时间变慢和/或内存使用量增加,而第二种方法可以解决这个问题。

另一方面,第二种方法实际上根本不起作用。调用构造函数时NewWidth已经用百分比Bitmap覆盖,但您想使用宽度作为第一个参数。您仍然需要那里的原始值NewWidth,因此您仍然需要将该值保留在变量中,直到您调用构造函数。

正如你所看到的,你已经给出了一个很好的例子,为什么你应该更喜欢可读性而不是边际优化。在您的第一种方法中,您可以立即看到您应该将NewWidth(而不是PercentW)作为第一个参数传递给new Bitmap. 在您的第二种方法中,这些值被混淆在一个变量中,您会混淆维护者(甚至您自己)。

于 2013-06-06T09:46:22.307 回答
0

这样做:

NewWidth = ((float)Img.Width / (float)NewWidth);

Bitmap bmp = new Bitmap(NewWidth, (int)(Img.Height / NewWidth));

由于将除法结果转换为 int,您可能会损失很多精度。

所以,第一种方法更正确。

于 2013-06-06T09:32:44.027 回答
0

毫无疑问,第一种情况更清楚。

想想未来某个时间必须维护您的代码的下一个人。

哪段代码更清晰?更容易理解?不太容易出现误解或错误?

于 2013-06-06T09:33:34.527 回答