兄弟のpictureboxは透過処理をするには?

このQ&Aのポイント
  • Controls.Addで親子にしたpictureboxは透過処理してくれますが、兄弟同士の透過処理が行われません。違う設定が必要なのでしょうか?
  • 兄弟のpictureboxは透過処理をする方法を教えてください。
  • 兄弟のpictureboxの透過処理に関して詳細を教えてください。
回答を見る
  • ベストアンサー

兄弟のpictureboxは透過処理をするには?

度々質問して申し訳ありません。 Controls.Addで親子にしたpicturebox はちゃんと透過処理してくれるのですが、 同じ親pictureboxの子供たち(兄弟)同士の透過処理が行われません。 違う設定が必要なのでしょうか? 教えていただけますか?よろしくお願いします。 文字数多くて載せられないので、重要であろう箇所のみです。スミマセン。 image = New Bitmap("c:\image.png")'透過部有 iconGraphics = Graphics.FromImage(image) Icon1 = New System.Windows.Forms.PictureBox iconGraphics.DrawImage(image, 0, 0, iconSize, iconSize) PictureBox1.Image = image Icon1.Location = New Point(8, 8) Icon1.Width = iconSize Icon1.Height = iconSize Icon1.BackColor = Color.Transparent PictureBox1.Controls.Add(Me.Icon1) Icon1.BringToFront() Icon1.Image = image

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

透過して見えるのは 親のように思います 兄弟関係のオブジェクトでは 透過されないように思いますよ

psychesine
質問者

お礼

ありがとうございます。 そういう仕様ということなんですね?

関連するQ&A

  • vc++ 2005 Pictureboxの透過処理

    お世話になります。 VC 2005で開発しているC++で教えていただきたい事が有ります。 PictureboxBの上にPictureboxAを透過率50%位で重ねて表示したいのですが、 Pictureboxのプロパティ等で一括で指定できないでしょうか? 出来ない場合、画像を一括で透過処理する方法が有りましたら教えていただけないでしょうか ※ ググって、単色を透過するのは、色々見つけたのですが、画像全体を透過する方法を見つけることが出来ませんでした。 現状は単純にファイル(写真)を読み込んで、PictureboxのImageに格納しているだけです。 ※将来的には、PictureboxAをドラッグで移動させたいので、背景画像(PictureboxB)との位相を取る方法以外でお願いいたします。 Bitmap^ PhotBMP = gcnew Bitmap(filename); // この間にサイズ変更&位置合わせの処理が有りますが、記載を省略させていただいております。 PictureboxA->Image = PhotBMP;

  • C# PictureBoxへの描画を行うとメッセージボックスが表示されません。

    いつもお世話になっております。 ふと、PictureBoxに描画をしてみようかと思い Paintイベントに以下のようにして描画を行いました。   myBitmap = new Bitmap(pictureBox1.Width, pictureBox1.Height);   Graphics g = Graphics.FromImage(myBitmap);   pictureBox1.Image = myBitmap;      ・      ・(g.FillRectangle(・・・);など)      ・ (myBitmapはBitmap型のグローバル変数です。) PictureBoxは、自由にサイズ変更可能なフォームに貼り付け、四方をanchorで固めています。 そのためサイズが変更されるたびに、描画するときBitmapのサイズも変更しないといけないので この処理を毎回通っています。 (その部分が何だか無駄な気がするのですが、他にいい方法が思いつきませんでした。) ところが、描画はうまくいったのですが、メッセージボックスを出すと そのメッセージボックスが一度Altキーを押さないと表示されません。 色々調べて、ダブルバッファリングというものがあると知りました。 そこでPaintイベントで最初にこの処理をし   Image image = new Bitmap(pictureBox1.Width, pictureBox1.Height);   g = Graphics.FromImage(image); gに描画し終わってから   e.Graphics.DrawImage(image, 0, 0); としてみると、今度はフォームを移動するのにも一瞬フリーズするようになってしまいました。 (あまり深くプログラミングをしたことがないので、理解しきれなくてやり方が悪いのかも知れません・・・) メッセージボックスが表示されないのは、PictureBoxの描画のため 他のコントロールの描画ができていなためだと推測しているのですが どう直していいかわかりません。 どなたか、わかる方がいましたらよろしくお願いします。 <補足> OS:Vista VisualStudio2008 .NET Framework3.5

  • picturebox の BackColor は透明に出来ないのですか?

    教えていただきたいことがあります。 [デザイン]上で、picturebox の BackColor を webColor の Transparent(透明) に指定したいのですが "コントロールは透明な背景色をサポートしません。"とエラーが出ます。 BackColor を透明には出来ないのでしょうか? よろしくお願いします。

  • vb.net 画像の透過について

    背面画像Aと前面画像Bがあります。 画像Bは画像A上をファイルから読み込んだ X,YのLocationを任意に移動します。 Bの画像の白色の部分を透過にして、背面の画像Bが見えるように 表示したいのですが、うまくいきません。 PictureBoxコントロールのimageプロパティに 画像Bを設定して、backColorにTransparentを指定しても 親コントロール(画像Bを表示しているPictureBox)の BackColorで表示されるだけでした。 vb6だとimageコントロールを使用すればできました。 vb.netで何か良い方法はないでしょうか?

  • VB2010 でのPictureboxのフォント指定

    VB2010 でのPictureboxのフォント指定 現在 Pictureboxのフォントをプログラムの先頭で定義しているのですが、 '------------------------------------------------------------------------- Dim fnt As New Font("MS ゴシック", 9) With PictureBox1 .Image = New Bitmap(.Size.Width, .Size.Height) g1 = Graphics.FromImage(.Image) g1.Clear(.BackColor) End With g1.DrawString("TEST" fnt, Brushes.Black, IX,IY) '------------------------------------------------------------------------- 下記のようにループ内で指定したいのですが、どう定義すればいいでしょうか。 For i=1 to 10 <------------------------ここでfont指定したい g1.DrawString("TEST" fnt, Brushes.Black, IX,IY) next

  • VC++.netにおけるPictureBox内の画像の透過処理について。

    現在VisualC++で囲碁対局ソフトを作成しています。 盤面イメージをPictureBoxに貼り付け、さらにそのPictureBoxの上に石を貼り付けるための小さいPictureBoxを升目の数だけ配置したのですが、そうすると下の盤面画像が見えなくなってしまいました。 そこで、石画像に背景色の透過処理を施したいのですが、うまくいきません。石の画像のうちの背景色の部分を透過させ、その部分には下の盤面画像が表示されるような方法を知っている方がいましたら、是非、お教えください。

  • OpenCVの透過処理

    VC 2010 C++/CLI + OpenCVで教えていただきたい事が有ります。 【教えていただきたい事】 ・pbPictureの画像を透過処理して表示 ※ 同じサイズの画像をアルファブレンドしたり、上面の画像の背景のみを透過するサンプルは見かけるのですが、   背面と異なるサイズの上面の画像全体を透過する、サンプルを見つけられませんでした。   (純粋に透過する機能がopenCVには無いとの事で、小細工が必要なのだと考えています) 【やりたいこと】 ・pbBackground(Picturebox)に背景となる画像を読込表示 ・pbPicture(Picturebox)に親フォームで作成したBMPの図形(画像)を半透明(透過率50%位)で重ねて表示 ・pbBackgroundのサイズは読込データ依存 ・pbPictureのサイズは親フォームで作成した図形依存   ※つまり、pbBackgroundとpbPictureは違うサイズ ・将来的には、マウス移動でpbPictureの位置、大きさ、台形補間をする予定 イメージとしては、下記URLのお化け屋敷の画像とほぼ同じ http://aidiary.hatenablog.com/entry/20061203/1251465083 ※実際は、背景が風景で、上書きする画像は建屋 【現状できているのは】 ・cvLoadImageで画像を読込してpbBackgroundに描画 ・親フォームで作成した図形を無加工でpbPictureに描画 【現状のソース】 System::Void PhotoRead_Click(System::Object^ sender, System::EventArgs^ e) { double BmpX,BmpY,XYRatio; double PhotoX,PhotoY; int PX,PY; System::Drawing::Point p; System::String^ filename; // pbBackgroundのディフォルトサイズは500×500 OpenFileDialog^ OpFile = gcnew OpenFileDialog(); // OpFile->DefaultExt = "jpg"; OpFile->Filter = "画像ファイル(*.jpg;*.png;*.bmp;*.gif)|*.jpg;*.png;*.bmp;*.gif"; if (OpFile->ShowDialog() == Windows::Forms::DialogResult::OK) { SuspendLayout(); filename = OpFile->FileName; // String^型をchar*に安全に変換 char* pStr = (char*)System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi( filename ).ToPointer(); // ファイル読み込み IplImage* img = cvLoadImage( pStr ); if( img == 0 ){ return; } // Bitmapに直接img->imgDataを読ませると、エラーになるのでコピーデータを渡す IntPtr ip( new unsigned char[ img->widthStep * img->height ] ); memcpy( ip.ToPointer(), img->imageData, img->widthStep * img->height ); Bitmap^ bmp = gcnew Bitmap(img->width, img->height, img->widthStep, System::Drawing::Imaging::PixelFormat::Format24bppRgb, ip); // 読み込みデータは解放 cvReleaseImage( &img ); //ピクチャボックスをビットマップ画像サイズに合わせる BmpX = (double)bmp->Width; BmpY = (double)bmp->Height; PhotoX = 500; PhotoY = 500; p.X = 10; p.Y = 40; PX = 500; PY = 500; if (BmpX <= BmpY) { XYRatio = BmpY / BmpX; PX = (int)(PhotoX / XYRatio); p.X = 10 + (500 - PX) /2; } else { XYRatio = BmpX / BmpY; PY = (int)(PhotoY / XYRatio); p.Y = 40 + (500 - PY) /2; } PictureBox^ pbBackground=gcnew PictureBox; pbBackground->Location = p; // サイズ指定、従来はWidthとHeightを別々に定義していたが、Sizeを使用すると1行で済む pbBackground->Size=System::Drawing::Size(PX,PY); //ピクチャボックスのImageへ読込画像をセット pbBackground->SizeMode = PictureBoxSizeMode::StretchImage; pbBackground->Image = bmp; Controls->Add(pbBackground); // ピクチャーボックスのpbBackgroundを親としているので、相対座標は0にする BmpX = (double)PhotBMP->Width; BmpY = (double)PhotBMP->Height; PhotoX = pbBackground->Width; PhotoY = pbBackground->Height; GX = (int)(PX / 2 - 100) + p.X; GY = (int)(PY / 2 - 100) + p.Y; // PictureBoxのグラフィックエリアにBitmapを描画する。 PictureBox^ pbPicture=gcnew PictureBox; pbPicture->Parent = pbBackground; pbPicture->Location = System::Drawing::Point(GX, GY); pbPicture->Size = System::Drawing::Size(200, 200); pbPicture->SizeMode = PictureBoxSizeMode::StretchImage; // 上書きする画像をセット pbPicture->Image = PhotBMP; Controls->Add(pbPicture); // デバッグで見やすくするためにバックをどぎつい色に BackColor=Color::FromArgb(0xFF,0xFF,0x00,0x00); pbPicture->BringToFront(); pbCursor->BringToFront(); ResumeLayout(); } }

  • pictureboxの画像を削除するには?

    Visual C# 2008を使用しています。 ボタンを押すとpictureboxに画像が表示されるプログラムを作成しました。 今度は、その表示された画像をクリックし、別のボタンを押すことでその画像が削除できるようにしたいと思っているのですが、うまくプログラムできません。 誰か教えていただけないでしょうか? ソースコードは以下のようになっています。 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace algorithm { public partial class Form1 : Form { int space = 10; public Form1() { InitializeComponent(); } private void listBox1_SelectedIndexChanged(object sender, EventArgs e) { } private void kihonsyori_Click(object sender, EventArgs e) { if (this.pictureBox1.Image == null) { Bitmap img = new Bitmap(@"C:\Documents and Settings\admin\My Documents\Visual Studio 2008\Projects\algorithm\algorithm\picture\基本処理箱.png"); Graphics g = pictureBox1.CreateGraphics(); g.DrawImage(img, 0, space, 0.4F * img.Width, 0.3F * img.Height); space += 50; img.Dispose(); g.Dispose(); } else { this.pictureBox1.Image.Dispose(); this.pictureBox1.Image = null; } } private void groupBox1_Enter(object sender, EventArgs e) { } private void pictureBox1_Click(object sender, EventArgs e) { } private void hanpuku_Click(object sender, EventArgs e) { if (this.pictureBox1.Image == null) { Bitmap img = new Bitmap(@"C:\Documents and Settings\admin\My Documents\Visual Studio 2008\Projects\algorithm\algorithm\picture\反復箱.png"); Graphics g = pictureBox1.CreateGraphics(); g.DrawImage(img, 0, space, 0.4F * img.Width, 0.3F * img.Height); space += 80; img.Dispose(); g.Dispose(); } else { this.pictureBox1.Image.Dispose(); this.pictureBox1.Image = null; } } private void sentaku_Click(object sender, EventArgs e) { if (this.pictureBox1.Image == null) { Bitmap img = new Bitmap(@"C:\Documents and Settings\admin\My Documents\Visual Studio 2008\Projects\algorithm\algorithm\picture\選択箱.png"); Graphics g = pictureBox1.CreateGraphics(); g.DrawImage(img, 0, space, 0.4F * img.Width, 0.3F * img.Height); space += 80; img.Dispose(); g.Dispose(); } else { this.pictureBox1.Image.Dispose(); this.pictureBox1.Image = null; } } private void sakujyo_Click(object sender, EventArgs e) { pictureBox1.Image = null; space = 0; } } }

  • VB.NETのグラフィック描画で困っています

    VB.NETでのグラフィックの記述方法ですが 何かをクリックすると描画させるのではなく 単にあるsubプロシージャ内でグラフィックを描画させる記述する方法として pictureBox1.Image=New Bitmap(PictureBox1.width,pictureBox1.Height) Dim g As Graphics = Graphics.FromImage(PictureBox1.Image) を教えていただきました。そこで private sub xy_keisan() '座標を計算させるプロシージャ disp_x() 'x座標に目盛りを表示させるプロシージャ disp_Y() 'xの目盛り数によってY座標の位置を変えて表示させるプロシージャ end sub private sub disp_x() pictureBox1.Image=New Bitmap(PictureBox1.width,pictureBox1.Height) Dim g As Graphics = Graphics.FromImage(PictureBox1.Image) g.DrawLine(****** end sub private sub disp_y() pictureBox1.Image=New Bitmap(PictureBox1.width,pictureBox1.Height) Dim g As Graphics = Graphics.FromImage(PictureBox1.Image) g.DrawLine(****** end sub のような記述(引数とか細かい所は端折っています)ですとdisp_yは描画されていますが,disp_xは消えてしまいます。 pictureBox1.Image=New Bitmap(PictureBox1.width,pictureBox1.Height) が消えてしまう原因だとおもって宣言場所を変えてみましたが同じです 逆にこれが無いと描画させることが出来なくなります。 これの意味も今ひとつ判りません よろしくお願い致します

  • bitmapクラスをiconクラスに変換する方法

    bitmapクラスをiconクラスに変換する方法 bitmapクラスをiconクラスに変換する方法 今、画像変換ソフトをVisual Basic 2010 Express Editionで作っているのですがbitmapクラスをiconクラスに変換する方法が分かりません。 GetHiconを使って変換する方法を試してみたのですがアイコンが16色になってしまい画像が変わってしまいます。 変換ソフトで使用するBitmapをIconに変換する関数を作ったのですが変換するところで止まっています。 Public Function convert_to_ico(ByVal image As Bitmap) As Icon Dim loadimage As Bitmap = New Bitmap(16, 16, PixelFormat.Format24bppRgb) Dim draw As Graphics = Graphics.FromImage(loadimage) draw.DrawImage(image, 0, 0) Dim returnico As Icon Return returnico End Function 申し訳ありませんが、宜しくお願いします。

専門家に質問してみよう