在我的隐藏对象游戏中,我想用以下代码标记带有圆形图像的对象,其中AnsX1,AnsX2,AnsY1,AnsY2是对象位置的像素坐标。应根据像素坐标
标记的对象大小调整圆形图像的大小 imgCat.Source = writeableBmp;
WriteableBitmap wbCircle = new WriteableBitmap(AnsX2 - AnsX1, AnsY2 - AnsY1);
wbCircle = new WriteableBitmap(0, 0).FromContent("Images/circle.png");
//Just to make sure the boundary is correct so I draw the green rec around the object
writeableBmp.DrawRectangle(AnsX1, AnsY1, AnsX2, AnsY2, Colors.Green);
Rect sourceRect = new Rect(0, 0, writeableBmp.PixelWidth, writeableBmp.PixelHeight);
Rect destRect = new Rect(AnsX1, AnsY1, wbCircle.PixelWidth, wbCircle.PixelHeight);
writeableBmp.Blit(destRect, wbCircle, sourceRect);
writeableBmp.Invalidate();
我的问题是没有一个大圆圈,而是在顶部的矩形区域填充了几个较小的圆圈(见图):
编辑1: 基于@Rene响应,我已将代码更改为
imgCat.Source = writeableBmp;
//Just to make sure the boundary is correct so I draw the green rec around the object
writeableBmp.DrawRectangle(AnsX1, AnsY1, AnsX2, AnsY2, Colors.Green);
WriteableBitmap wbCircle = new WriteableBitmap(0, 0).FromContent("Images/circle.png");
wbCircle = wbCircle.Resize(AnsX2 - AnsX1, AnsY2 - AnsY1, WriteableBitmapExtensions.Interpolation.Bilinear);
Rect sourceRect = new Rect(0, 0, writeableBmp.PixelWidth, writeableBmp.PixelHeight);
Rect destRect = new Rect(AnsX1, AnsY1, AnsX2 - AnsX1, AnsY2 - AnsY1);
writeableBmp.Blit(destRect, wbCircle, sourceRect);
writeableBmp.Invalidate();
这是结果
如果我设法解决这个问题,我将使用更大更好的质量circle.png。
答案 0 :(得分:3)
首先我认为circle.png太小了。 Blit方法不能扩展。您需要首先使用Scale函数进行缩放,如下所示:
wbCircle = wbCircle.Resize(AnsX2 - AnsX1, AnsY2 - AnsY1, WriteableBitmapExtensions.Interpolation.Bilinear);
第二,sourceRect使用整个/目标位图的大小而不是wbCircle / source位图的大小。应该是:
sourceRect = new Rect(0, 0, wbCircle.PixelWidth, wbCircle.PixelHeight);
如果圆太小而且向上缩放太高,缩放可能会导致一些缩放伪像。如果你真的只需要一个简单的彩色圆圈,你也可以使用DrawCircle方法:
writeableBmp.DrawCircle(AnsX1, AnsY1, AnsX2, AnsY2, Colors.Green);