1

私は WPF を初めて使用し、アプリケーションを VB6 から C# および XAML に移植しようとしています。

私が今しなければならないことは、一連の「タイル」のように配置された、多数の小さな画像から 1 つの大きな画像を作成することです。これらの小さいものの一部には、オーバーレイが重ねられています。

VB6 では、PictureBox コントロールで PaintPicture メソッドを使用するだけで、タイリングとオーバーレイの両方を実現できます。

これは、タイリングとオーバーレイを 1 つのステップで実行しようとする試みです (ただし、実際にはオーバーレイは事前に発生する可能性があります)。

ImageDrawing Drawing1 = new ImageDrawing(new BitmapImage(new Uri(@"c:\one.bmp",
                                          UriKind.Absolute)),
                                         new Rect(0, 0, 40, 130));

ImageDrawing Drawing2 = new ImageDrawing(new BitmapImage(new Uri(@"c:\two.bmp",
                                          UriKind.Absolute)),
                                         new Rect(40, 0, 45, 130));

ImageDrawing Drawing3 = new ImageDrawing(new BitmapImage(new Uri(@"c:\overlay.bmp",
                                          UriKind.Absolute)),
                                         new Rect(40, 0, 45, 130));

DrawingGroup myDrawingGroup = new DrawingGroup();
myDrawingGroup.Children.Add(Drawing1);
myDrawingGroup.Children.Add(Drawing2);
myDrawingGroup.Children.Add(Drawing3);

myImage.Source = new DrawingImage(myDrawingGroup);

タイリングは問題なく機能しますが、オーバーレイはダメです。私は疑問に思っていた

  1. 誰かがオーバーレイを達成する方法を教えてくれます
  2. これがタイリングを行う最良の方法であるかどうかを誰かが示すことができます。

ありがとう!!

4

1 に答える 1

1

MSDN フォーラムの投稿で、GDI+ 呼び出しを使用してオーバーレイの問題も解決できるものを見つけました。

ImageDrawing Drawing1 = new ImageDrawing(new BitmapImage(new Uri(@"c:\one.bmp",
                                                                 UriKind.Absolute)),
                                                         new Rect(0, 0, 40, 130));

ImageDrawing Drawing2 = new ImageDrawing(new BitmapImage(new Uri(@"c:\two.bmp",
                                                                 UriKind.Absolute)), 
                                                         new Rect(40, 0, 45, 130));

Bitmap bitmap = new Bitmap(@"c:\overlay.bmp");

bitmap.MakeTransparent();

ImageDrawing Drawing3 = new ImageDrawing(Imaging.CreateBitmapSourceFromHBitmap(bitmap.GetHbitmap(),
                                                                               IntPtr.Zero, 
                                                                               Int32Rect.Empty, 
                                                                               BitmapSizeOptions.FromEmptyOptions()),
                                         new Rect(40, 0, 45, 130));

DrawingGroup myDrawingGroup = new DrawingGroup();
myDrawingGroup.Children.Add(Drawing1);
myDrawingGroup.Children.Add(Drawing2);
myDrawingGroup.Children.Add(Drawing3);

myImage.Source = new DrawingImage(myDrawingGroup);

これは機能しますが、目的を達成するための特に複雑な手段であることには驚かされます。確かに、もっと簡単な、すべて WPF の方法があります。

于 2009-09-02T18:21:19.530 に答える