私はそこにpngのあるピクチャボックスを持っています。しかし、BackColorを透明に設定しても、透明ではありません。どのようなアイデアが間違っているかもしれない? :)C#、どのように画像の背景を透明にするには?
ありがとう!
私はそこにpngのあるピクチャボックスを持っています。しかし、BackColorを透明に設定しても、透明ではありません。どのようなアイデアが間違っているかもしれない? :)C#、どのように画像の背景を透明にするには?
ありがとう!
私も透明な画像に関する問題に直面しています。
コードで描画する必要があります。 私の質問A PictureBox Problem
EDITを参照してください:ペイントイベント(コントロール含む背景画像) 書き込みで
この
//If added your image in project's resources get from there OR your Image location
Image img = yourNamespace.Properties.Resources.yourPicture;
e.Graphics.DrawImage(img,50,50,100,100);
申し訳ありませんあなたのイメージを表示していません。今、Upadated –
私が学んだことから、イメージ用のレイヤーを持たないため、Windowsフォーム内ではできません。だからWPFとしてそれを作る必要があります。 :)
をどのように背景を作成しましたか?それはForm.BackgroundImage
を設定して設定されていますか? その背景(紙のような画像)がコンテナコントロールである場合、透明度はちょうどうまくいくはずです。 しかし、2つのPictureBox
オブジェクトを重ねて配置する場合、これは機能しません。透過領域は親オブジェクトの色を取ります。 2つのPictureBox
オブジェクトを持っている場合、両方ともその親としてForm
を持ちます。これがあなたの状況であれば、透明イメージのParent
プロパティを背景イメージに設定することで解決できます。
private void Form1_Load(object sender, EventArgs e)
{
transparentPictureBox.Parent = backgroundPictureBox;
}
Parent
プロパティを変更する場合は、tranparentPictureBox
のLocation
は、新しい親からの相対になります。透明な画像から背景画像のx座標とy座標を減算する必要があります。スクリーンショットの例については、私の答え、A PictureBox Questionを参照してください。
AFAIKでは、デザイナーでParent
をコードでのみ設定することはできません。したがって、デザイナーはまだではなく、で透明イメージを表示しますが、実行時にはそれが必要です。
PictureBox
オブジェクトの上に透明なLabel
を配置する場合、同じ問題が発生します。
実際にコードで描画する必要があります。フォームにpictureBoxを配置し、sizeModeを設定して、好きなようにドッキングします。そして、あなたはのPictureBoxのPaintイベントに次の関数を発射することがあります。
class cls_convertImagesByte
{
public static Image GetImageFromByte(byte[] byteArrayIn)
{
MemoryStream ms = new MemoryStream(byteArrayIn);
Image returnImage = Image.FromStream(ms);
return returnImage;
}
public static byte[] GetByteArrayFromImage(System.Drawing.Image imageIn)
{
MemoryStream ms = new MemoryStream();
imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
return ms.ToArray();
}
}
ありがとう:
public void LogoDrawTransparent(PaintEventArgs e) { // Create a Bitmap object from an image file. Image myImg; Bitmap myBitmap;
try
{
myImg = cls_convertImagesByte.GetImageFromByte(newImg);
myBitmap = new Bitmap(myImg); // @"C:\Temp\imgSwacaa.jpg");
// Get the color of a background pixel.
Color backColor = myBitmap.GetPixel(0, 0); // GetPixel(1, 1);
Color backColorGray = Color.Gray;
Color backColorGrayLight = Color.LightGray;
Color backColorWhiteSmoke = Color.WhiteSmoke;
Color backColorWhite = Color.White;
Color backColorWheat = Color.Wheat;
// Make backColor transparent for myBitmap.
myBitmap.MakeTransparent(backColor);
// OPTIONALLY, you may make any other "suspicious" back color transparent (usually gray, light gray or whitesmoke)
myBitmap.MakeTransparent(backColorGray);
myBitmap.MakeTransparent(backColorGrayLight);
myBitmap.MakeTransparent(backColorWhiteSmoke);
// Draw myBitmap to the screen.
e.Graphics.DrawImage(myBitmap, 0, 0, pictureBox1.Width, pictureBox1.Height); //myBitmap.Width, myBitmap.Height);
}
catch
{
try { pictureBox1.Image = cls_convertImagesByte.GetImageFromByte(newImg); }
catch { } //must do something
}
}
これは、上記の関数で参照されている私のクラスです。チャグバート。
スクリーンショットはデザイナーのものです - これはアプリケーションの実行時にも起こりますか? – Oded
はい、あります。 :) – Rob
画像に勾配があるようです。たとえあなたがアルファチャンネルに適切な色を見つけたとしても、その勾配は罪のように醜いでしょう。 – kenny