透明な背景に緑色の円でイメージをロードするには、c#(System.Drawings)を使用してビットマップイメージにロードする必要があります。透明な背景でイメージの色を変更する
これは簡単な部分です。しかし、周囲の透明度に影響を与えずに、大きな画像に追加する前に円の色を変更する必要があります。私の場合は、円の色を黄色に変更し、太陽として追加する必要があります。
希望の色がダイナミックであるため、固定黄色の円のイメージは使用できません。
このコードでは、ビットマップに追加する前に画像の色を変更するにはどうすればよいですか?
Image i = Image.FromFile(greenCircleFile);
Bitmap b = new Bitmap(500, 500);
using(Graphics g = Graphics.FromImage(b))
{
//--> Here I need to change the color of the green circle to yellow
//afterwards I can add it to the bitmap image
g.DrawImage(i, 0, 0, 500, 500);
}
二つのことを考慮する必要があることに注意してください:形状(円)のアンチエイリアシングを維持し、本来の色をオーバーレイすることであるように、カラーは、ユーザが拾い、使用する必要がありますサークル。固定
:@TaWに
おかげで、彼は正しい答えを提供します。しかしグリッチで、ここに私のために働いた最終版です:
Image i = Image.FromFile(greenCircleFile);
Bitmap b = new Bitmap(500, 500);
using(Graphics g = Graphics.FromImage(b))
{
//Here I need to change the color of the green circle to yellow
i = ChangeToColor(b, Color.Gold)
//afterwards I can add it to the bitmap image
g.DrawImage(i, 0, 0, 500, 500);
}
次のようにChangeToColor機能ですが:
Bitmap ChangeToColor(Bitmap bmp, Color c)
{
Bitmap bmp2 = new Bitmap(bmp.Width, bmp.Height);
using (Graphics g = Graphics.FromImage(bmp2))
{
float tr = c.R/255f;
float tg = c.G/255f;
float tb = c.B/255f;
ColorMatrix colorMatrix = new ColorMatrix(new float[][]
{
new float[] {0, 0, 0, 0, 0},
new float[] {0, 0, 0, 0, 0},
new float[] {0, 0, 0, 0, 0},
new float[] {0, 0, 0, 1, 0},
new float[] {tr, tg, tb, 0, 1}
});
ImageAttributes attributes = new ImageAttributes();
attributes.SetColorMatrix(colorMatrix);
g.DrawImage(bmp, new Rectangle(0, 0, bmp.Width, bmp.Height),
0, 0, bmp.Width, bmp.Height, GraphicsUnit.Pixel, attributes);
}
return bmp2;
}
サンプルコードが追加されました。 @Lamarありがとうございます。 – Lamar
投票が取り消されました:) – MickyD
または[こちらをご覧ください](http://stackoverflow.com/questions/28847270/c-sharp-recolored-image-pixelated/28849281?s=9|0.0530#28849281)! – TaW