0

我从文件夹中获取图像并将其绘制在白色 btimap 上,如下面的代码所示

Image newImage = new Bitmap(whitesize, whitesize);
using (Graphics graphicsHandle = Graphics.FromImage(newImage))
{
    graphicsHandle.InterpolationMode = InterpolationMode.HighQualityBicubic;
    graphicsHandle.FillRectangle(System.Drawing.Brushes.White,0,0,whiteHeight,whiteHeight);
    graphicsHandle.CompositingMode = CompositingMode.SourceOver;
    graphicsHandle.DrawImage(image, whiteHeight, 0, newWidth, newHeight);             
}

whiteHeight是正方形的宽度和高度

将 whiteHeight 除以 2 是行不通的,因为newWidthnewHeight是动态的,这更像是一个数学问题

4

1 回答 1

1

您实际上需要找到容器的中心和您需要放置的图像的中心,然后使它们相同。

容器的中心将是:

(X,Y) = (ContainerWidth/2,ContainerHeight/2) = (whiteHeight/2,whiteHeight/2)

因为 whitesize 是一个常数,所以中心也是一个常数,并且它的坐标是已知的。

现在你需要找到一个方程来使图像居中。

再次,您将需要找到图像的动态中心,这又将是

(Xi,Yi) = (newWidth /2,newHeight /2)

这当然是动态的。现在您需要找到顶部和左侧的边距才能放置图像。

左边距将称为 ImageLeft,顶部将称为 ImageTop。

现在您可能会理解,ImageLeft 将位于图像中心的左侧,并且该位将等于

ImageLeft = CenterX - (newWidth / 2)

CenterX 被称为它必须等于容器的中心,所以:

ImageLeft = (whiteHeight/ 2) - (newWidth / 2)

ContainerWidth 是一个已知的常量,而 ImageWidth 虽然是动态的,但在运行时将是已知的,因为它将由图像属性提供。

所以,现在你有了由已知因素表示的图像的左点。

以同样的方式你可以发现 ImageTop 等于:

ImageTop = (whiteHeight/ 2) - (newHeight / 2)

现在您知道从哪里开始绘制图像的确切点,那就是:

graphicsHandle.DrawImage
(
    image, 
    (whiteHeight/ 2) - (newWidth / 2), 
    (whiteHeight/ 2) - (newHeight / 2), 
    newWidth, 
    newHeight
);
于 2013-10-02T07:39:27.183 回答