将图像覆盖在另一个之上

问题描述

| 我试图绘制一个白色矩形(100 x 200),并在中间绘制一个较小的图像(50 x 75),以使其看起来类似于纸牌的背面。 通过以下代码,我得到的只是带有边框的图块,但没有图像。
        //generate temporary control to render image
        Image temporaryImage = new Image { Source = emptyTileWatermark,Width = destWidth,Height = destHeight };

        //create writeableBitmap
        WriteableBitmap wb = new WriteableBitmap(outputWidth,outputHeight);
        wb.Clear(Colors.White);

        // Closed green polyline with P1(0,0),P2(outputWidth,P3(outputWidth,outputHeight) and P4(0,outputHeight)
        var outline = new int[] { 0,outputWidth,outputHeight,0};
        wb.Drawpolyline(outline,Colors.Black);
        wb.Invalidate();
        wb.Render(temporaryImage,new TranslateTransform { X = destX,Y = destY });
        wb.Invalidate();
我应该指出,要执行.Clear(),我正在使用writeablebitmapex项目。 有任何想法吗???     

解决方法

        您的临时图像尚未执行布局,因此在渲染时仍为空白。为了解决这个问题,您应该称其为Measure and Arrange,这并不总是可靠的,但是将其包装在Border中并进行测量和排列似乎可行。 就像您已经在使用WriteableBitmapEx一样,您可以使用其Blit方法代替。
WriteableBitmap emptyTile = new WriteableBitmap(emptyTileWatermark);
//create writeableBitmap
WriteableBitmap wb = new WriteableBitmap(outputWidth,outputHeight);
wb.Clear(Colors.White);

// Closed green polyline with P1(0,0),P2(outputWidth,P3(outputWidth,outputHeight) and P4(0,outputHeight)
var outline = new int[] { 0,outputWidth,outputHeight,0};
wb.DrawPolyline(outline,Colors.Black);
wb.Blit(new Rect(destX,destY,destWidth,destHeight),emptyTile,new Rect(0,emptyTileWatermark.PixelWidth,emptyTileWatermark.PixelHeight));
    ,        我不是图像处理专家,但是在这种情况下,
Blit
函数似乎很有用。不要尝试渲染
temporaryImage
,而是以
emptyTileWatermark
作为源创建一个新的
WriteableBitmap
。将此WriteableBItmap用作ѭ6and参数,并将
wb
用作
Dest
参数,然后将两个WriteableBitmap映射。 (
Blit
功能随附于
WriteableBitmapEx
)。