-1

昨天我只是问逻辑,如果其他错误。但是当我这样做的时候?int,它的错误...

        private static void mergeimagefile(string image1path, string image2path)
    {
        //get all the files in a directory
        string jpg1 = @image1path;
        string jpg2 = @image2path;
        string jpg3 = @image2path;


        Image img1 = Image.FromFile(jpg1);
        Image img2 = Image.FromFile(jpg2);

        //int width = img1.Width + img2.Width;
        int width = 640;
        //int height = Math.Max(img1.Height, img2.Height);
        int height = 360;
        int w;

        if (img2.Width > 640) {
            w = 640;
        }
        else if (img2.Width <= 640)
        {
            w = ((width - img2.Width) / 2);
        }
        System.Windows.Forms.MessageBox.Show(w.ToString());

        int h = new int();
        if (img2.Height > 360)
        {
            h = 360;
        }
        else if (img2.Height <= 360)
        {
            h = (height - img2.Height) / 2;
        }


        Bitmap img3 = new Bitmap(width, height);
        Graphics g = Graphics.FromImage(img3);

        g.Clear(Color.Black);
        g.DrawImage(img1, new Point(0, 0));
        //ERROR IN HERE
        g.DrawImage(img2, new Point(w, h));

        g.Dispose();
        img1.Dispose();
        img2.Dispose();

        img3.Save(jpg3, System.Drawing.Imaging.ImageFormat.Jpeg);
        img3.Dispose();

    }

我已经尝试添加, int?, int w = null;, 并且根据这个 Msdn Manual,它仍然给我错误?

错误 1 ​​使用未分配的局部变量 'w' C:\Documents and Settings\admin\My Documents\Visual Studio 2008\Projects\template\template\Form1.cs 68 50 模板

如何做到这一点?

4

4 回答 4

2

怎么样

int w = 0;

那应该处理初始化错误。

于 2012-12-29T18:00:36.317 回答
1

您需要分配一个值,因此将其初始化为 0。

int w = 0;

您需要这样做的原因是,如果您不匹配这些值中的任何一个

if (img2.Width > 640)
{
    w = 640;
}
else if (img2.Width <= 640)
{
    w = ((width - img2.Width) / 2);
}

然后w将被取消分配。

也以相同的方式分配h,因为int h = new int();它不是初始化整数的方法。

于 2012-12-29T18:01:13.033 回答
1

int? w = null; Represents a value type that can be assigned null.[在此处输入链接描述][1] 为什么不初始化 int w = 0 或

如果你想变得花哨

int w = default(int); //this is equiv to saying int w = 0;
于 2012-12-29T18:10:42.633 回答
0

编译器认为语句w之后的值可能是未定义的。if它的构建不够聪明,无法认识到条件实际上涵盖了所有情况。

第二个if陈述是多余的,因为如果第一个条件为假,它总是为真。只需删除第二if条语句并将代码放入else

if (img2.Width > 640) {
  w = 640;
} else {
  w = ((width - img2.Width) / 2);
}

现在编译器可以很容易地看到变量总是得到一个值。

于 2012-12-29T18:25:32.137 回答