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正方形の幅と高さです

newWidthnewHeightは動的であるため、whiteHeight を 2 で割ってもうまくいきません。

4

1 に答える 1

1

実際には、コンテナの中心と配置する必要がある画像の中心を見つけて、それらを同じにする必要があります。

コンテナの中心は次のようになります。

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

whitesize は定数であるため、中心も定数であり、その座標は既知です。

次に、画像を中央に配置するための方程式を見つける必要があります。

再び、画像の動的な中心を見つける必要があります。

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

これはもちろん動的です。画像を配置するには、上と左の余白を見つける必要があります。

Left Margin は ImageLeft と呼ばれ、Top は 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 に答える