winforms 图像在另一个图像上居中

zzwlnbp8  于 2022-11-16  发布在  其他
关注(0)|答案(3)|浏览(141)

我对C# GDI+图形还是个新手。
我想在另一个图像上绘制一个图像,该图像应该在图像上的固定高度和宽度容器中水平和垂直居中。
我试着用水平居中来做这个,输出很奇怪。
我正在分享我如何尝试做它的注解代码,让我知道如果有任何更简单的方法来做它,我只想缩放和中心的图像。

//The parent image resolution is 4143x2330 
//the container for child image is 2957x1456
Image childImage = Image.FromFile(path.Text.Trim());
Image ParentImage = (Image)EC_Automation.Properties.Resources.t1;
Bitmap bmp2 = (Bitmap)ParentImage;
Graphics graphic = Graphics.FromImage(ParentImage); 
graphic.InterpolationMode = InterpolationMode.HighQualityBicubic;
double posX = (2957 / 2.0d) - (childImage.Width / 2.0d); 
//HAlf of the container size - Half of the image size should make it center in container
graphic.DrawImage((Image)childImage,
new Rectangle(new Point((int)posX, 420), new Size( 2957, 1456))); //Drawing image
jdzmm42g

jdzmm42g1#

public Image ScaleImage(Image image, int maxWidth, int maxHeight)
{
    var ratioX = (double)maxWidth / image.Width;
    var ratioY = (double)maxHeight / image.Height;
    var ratio = Math.Min(ratioX, ratioY);

    var newWidth = (int)(image.Width * ratio);
    var newHeight = (int)(image.Height * ratio);

    var newImage = new Bitmap(maxWidth, maxHeight);
    using (var graphics = Graphics.FromImage(newImage))
    {
        // Calculate x and y which center the image
        int y = (maxHeight/2) - newHeight / 2;
        int x = (maxWidth / 2) - newWidth / 2;
        
        // Draw image on x and y with newWidth and newHeight
        graphics.DrawImage(image, x, y, newWidth, newHeight);
    }

    return newImage;
}
u4dcyp6a

u4dcyp6a2#

谢谢@加布里埃尔·卡莱加里
对于代码下方的中心图像集x

int x = (PaperWidth/ 2) - imageWidth / 2;
graph.DrawImage(image, x, 0, imageWidth, ImageHeight);
ia2d9nvy

ia2d9nvy3#

解决了这个问题,我画的是固定宽度的图像,而它应该有一个新的宽度的基础上纵横比和新的高度,
同时,我试图从容器中找到图像的中心,这应该是整个父图像的中心

相关问题