C# .NET设置图像显示大小

C# .NET设置图像显示大小,c#,winforms,image-processing,C#,Winforms,Image Processing,我正在使用一些自定义控件,其中一个是可以显示图像的工具提示控制器,因此我正在使用ebelow代码对其进行实例化: Image newImage = Image.FromFile(imagePath); e.ToolTipImage = newImage; 显然,我们可以将其内联,但目前只是测试。问题是图像有时大小不正确,是否有办法设置显示大小。目前我能看到的唯一方法是使用GDI+或类似的东西编辑图像。当我只想调整显示大小而不影响实际图像时,似乎需要很多额外的处理。一旦从图像源加载了图像对象,高

我正在使用一些自定义控件,其中一个是可以显示图像的工具提示控制器,因此我正在使用ebelow代码对其进行实例化:

Image newImage = Image.FromFile(imagePath);
e.ToolTipImage = newImage;

显然,我们可以将其内联,但目前只是测试。问题是图像有时大小不正确,是否有办法设置显示大小。目前我能看到的唯一方法是使用GDI+或类似的东西编辑图像。当我只想调整显示大小而不影响实际图像时,似乎需要很多额外的处理。

一旦从图像源加载了图像对象,高度和宽度(以及大小和所有辅助属性)都是只读的。因此,您必须使用GDI+方法在RAM中调整它的大小,然后相应地显示它

您可以采取很多方法,但是如果您要将其封装到一个库中,以便在再次出现此问题时可以重用,那么您就可以开始了。这并不是完全优化的(即,可能有一些bug),但应该让您了解如何处理它:

Image newImage = Image.FromFile(myFilePath);
Size outputSize = new Size(200, 200);
Bitmap backgroundBitmap = new Bitmap(outputSize.Width, outputSize.Height);
using (Bitmap tempBitmap = new Bitmap(newImage))
{
    using (Graphics g = Graphics.FromImage(backgroundBitmap))
    {
        g.InterpolationMode = InterpolationMode.HighQualityBicubic;
        // Get the set of points that determine our rectangle for resizing.
        Point[] corners = {
            new Point(0, 0),
            new Point(backgroundBitmap.Width, 0),
            new Point(0, backgroundBitmap.Height)
        };
        g.DrawImage(tempBitmap, corners);
    }
}
this.BackgroundImage = backgroundBitmap;

我做了测试,它成功了。(它为我的一张桌面壁纸创建了一个200x200大小的版本,然后将其设置为scratch WinForms项目中主窗体的背景图像。如果您在WinForms中的PictureBox控件中包含图像,则需要使用
语句对
System.Drawing
System.Drawing.Drawing2D
进行
。)e PictureBox控件可以设置为缩放到特定的高度/宽度,并且图像应符合


至少这是我做这个练习时头一本C#book上发生的事情。

谢谢,我意识到不幸的是,这需要以一种我无法替代的方法传入图像。谢谢,我的想法是,显示大小与实际图像分辨率是分开的,因此应该可以单独修改,而不必真正编辑t他在想象,但也许不是。不幸的是,不是……希望(一个修改版)这对你有用。:)