Vectorに画像ファイルの色を入れ替えてくれるフリーソフトを登録しました。

画像ファイルの色を置換したい

これは指定した色を別の色に置き換えることができるアプリです。

さてPNGファイルであれば透過が可能です。ところで透過を別の色に置き換える場合、どのようにすればいいでしょうか?

これはフィールド変数 BeforeColorに格納された置き換え前のColorと同じかどうかを判定するメソッドです。

残念ながらこれだとうまくいきません。透過色の場合、if文のなかでtrueを返してほしいのですが、そうはなってくれません。

以下のような実験コードを実行してみると

color1 != color2
color1.ToArgb() == color2.ToArgb()
color1.ToString() : Color [Empty]
color2.ToString() : Color [A=0, R=0, G=0, B=0]
color2 != Color.Empty
color2.IsEmpty == false

と表示されます。

Color.Empty.ToArgb() == 0であってもColor.Emptyと同じ場合もあるし、そうでない場合もあります。両者はどのように区別すればいいのでしょうか?

Color.EmptyはToArgb() == 0ではあるけれども、Color.FromArgb(0)と同じではありません。Color.FromArgb(0).IsEmptyは偽を返します。これで両者の区別ができそうです。

ということで最初の例では

とやればよいということになります。