0

ビットマップに画像を描画する非常に単純なコードがあります。画像は右下隅に描画する必要があります。TranslateTransform を使用して画像を移動します。これは、Windows で実行すると問題なく動作しますが、Linux で Mono を実行すると、TranslateTransform は効果がありません。

byte[] imageBytes = File.ReadAllBytes(@"/home/alexey/Downloads/test.png");
using (Bitmap bmp = new Bitmap(500, 500))
{
    using (Graphics gr = Graphics.FromImage(bmp))
    {
        ImageAttributes attr = null;

        using (Image image = Image.FromStream(new MemoryStream(imageBytes)))
        {
            GraphicsUnit srcGU = GraphicsUnit.Pixel;
            RectangleF srcRect = image.GetBounds(ref srcGU);
            RectangleF bounds = new RectangleF(0, 0, 100, 100);

            // Destination points specify the bounding parallelogram.
            PointF[] dstPoints = new PointF[]
                { bounds.Location,
                  new PointF(bounds.X + bounds.Width, bounds.Y),
                  new PointF(bounds.X, bounds.Y + bounds.Height) };

            // Image must be in the in the lower right corner and it is if run the code under Windows.
            // But is run code under linux, the image is in the upper left corner.
            gr.TranslateTransform(400,400);

            gr.DrawImage(image, dstPoints, srcRect, srcGU, attr);
        }
    }
    bmp.Save(@"/home/alexey/Downloads/out.png", ImageFormat.Png);
}

もちろん、このコードは実際のコードを簡略化したものであり、Windows 環境と Linux 環境の両方で動作する必要があります。コードを絞り込んだところ、Linux で問題が発生するのは、Linux の Mono では Graphics.Transform が効果がないためであることがわかりました。何か案は?

4

1 に答える 1

0

最も簡単な解決策は、dstPoints の X および Y コンポーネントに単純に 400 を追加することだと思います。

于 2012-05-04T22:19:08.927 に答える