问题描述
|
我试图绘制一个白色矩形(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
)。