2

在我的隐藏对象游戏中,当使用以下代码找到对象时,我想用圆形图像标记对象,其中 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。

4

1 回答 1

3

首先我认为 circle.png 太小了。Blit 方法不会按比例放大。您需要先使用 Scale 函数将其放大,如下所示:

wbCircle = wbCircle.Resize(AnsX2 - AnsX1, AnsY2 - AnsY1, WriteableBitmapExtensions.Interpolation.Bilinear);

其次,sourceRect 使用整个/目标位图的大小,而不是 wbCircle/源位图的大小。应该:

sourceRect = new Rect(0, 0, wbCircle.PixelWidth, wbCircle.PixelHeight);

如果圆圈太小并且放大比例太高,则缩放可能会导致一些缩放伪影。如果你真的只需要一个简单的彩色圆圈,你也可以使用 DrawCircle 方法:

writeableBmp.DrawCircle(AnsX1, AnsY1, AnsX2, AnsY2, Colors.Green);
于 2013-02-04T08:35:24.267 回答