2

こんにちは、助けが必要です :) カスタム クラス Filters があり、その中に AForge.Point から System.Drawing.PointF に変換する明示的な変換演算子を定義しました。AForge.Point と System.Drawing.PointF はどちらもライブラリの構造体です。blob.CenterOfGravity は AForge.Point のタイプです。問題は、intelisense が「'AForge.Point' を 'System.Drawing.PointF' に変換できません。なぜこの変換ができないのかわかりません :/.すべての返信に感謝します。

class Filters
{
        public static explicit operator System.Drawing.PointF(AForge.Point apoint)
        {
            return new PointF(apoint.X,apoint.Y);
        }
        public void DrawData(Blob blob, Bitmap bmp)
        {
            int width = blob.Rectangle.Width;
            int height = blob.Rectangle.Height;
            int area = blob.Area;
            PointF cog = (PointF)blob.CenterOfGravity;
        }
        ...
}
4

2 に答える 2

4

を使用してこれを行うことはできません。operatorこれらは、変換する型 (AForge.PointまたはSystem.Drawing.PointF) によって定義する必要があるためです。ドキュメントごと:

変換される引数の型、または変換の結果の型のいずれか (両方ではなく) が、包含型である必要があります。

1 つの代替方法は、次の拡張メソッドを定義することですAForge.Point

public static class PointExtensions
{
    public static PointF ToPointF(this AForge.Point source)
    {
        return new PointF(source.X, source.Y);
    }
}

そして、次のように使用します:

PointF cog = blob.CenterOfGravity.ToPointF();
于 2015-05-10T13:57:48.277 に答える
0

Uはこれを試すことができます

private static System.Drawing.PointF convertToPointF(AForge.Point apoint)
    {
        return new PointF(apoint.X,apoint.Y);
    }
    public void DrawData(Blob blob, Bitmap bmp)
    {
        int width = blob.Rectangle.Width;
        int height = blob.Rectangle.Height;
        int area = blob.Area;
        PointF cog = convertToPointF(blob.CenterOfGravity);
    }
于 2015-05-10T13:58:36.620 に答える