• 締切済み

画像の透明化

どうしてもわからない部分があります。 C++の経験浅いので、見当違いな記載があっても許してください。 Visualstadio C++ ExpressEdition 2005を使用しています。 bmp画像をPictureBoxで配置し、その上にPictureBox(bmp画像)を重ねて置いた場合、特定の一色を透明化させたいです。 どうかみなさんよろしくお願いします。

みんなの回答

  • nim05
  • ベストアンサー率61% (111/181)
回答No.4

描画のAPIにGDI+を使用して、32BitBitmapとしてデータを読み込み、透過したいピクセルのα値を0にする、という方法もあります。 C++でもOKですが、WindowsSDKを別途インストールする必要があります。 http://d.hatena.ne.jp/yu-hr/20090131/1233349618 検索すると、PlatformSDKを入れろ、という情報が沢山見つかると思いますが、今はWindowsSDKに引っ越ししたようです。

全文を見る
すると、全ての回答が全文表示されます。
  • titokani
  • ベストアンサー率19% (341/1726)
回答No.3

#1、#2です。 あと、 4.MaskBltを使う 5.イメージリストを使う という方法も使えそうです。

全文を見る
すると、全ての回答が全文表示されます。
  • titokani
  • ベストアンサー率19% (341/1726)
回答No.2

#1です。 >3.リージョンを計算して、PictureBoxにSetRgnする。 SetRgnじゃなかったですね。SetWindowRgnでした。

全文を見る
すると、全ての回答が全文表示されます。
  • titokani
  • ベストアンサー率19% (341/1726)
回答No.1

1.自力でBMP画像同士を合成する。 2.TransparentBltを使う 3.リージョンを計算して、PictureBoxにSetRgnする。 の、どれかでしょうか。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 二つの画像を並べて表示

    ひとりで独学でVC++2005を勉強してるのですが、pictureBoxでつまずいます。初心者ですがわかりやすく教えて頂けたらと思います。 やりたい事はタイトル通り、画像を単純に並べて表示したいだけなのですが、WEB場で検索しても的を得た答えが見つかりませんでした。 二つの画像を読み込んで、新しいBitmapデータに書き込めばいいのかと思ったのですが、どうやっていいのか見当が付きません。 Bitmap^ bmpA = gcnew Bitmap("testAA.bmp"); Bitmap^ bmpB = gcnew Bitmap("testAB.bmp"); int w = bmpA->Width + bmpB->Width; int h = bmpA->Height + bmpB->Height; Bitmap^ bmp = gcnew Bitmap(w,h); //ここで何やっていいかわかりません。 pictureBox1->Image = bmp; 最終的にはタイル的にどんどん並べて行きたいと考えています。 助言の方よろしくお願いします。

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

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

  • Open CVについて

    現在,OpenCVとVC++2008のC++/CLIでwindows formアプリケーションを作成しています。 フォーム上のpictureBoxにUSBカメラから取得した画像を,録画しながら,pictureBoxに表示させています。しかし,取り込んだ画像が,pictureBoxに収まり切っていないようです。(添付画像のようなに枠内の画像に対して,肌色部分しか,pictureBoxに表示されていない状態) コードは http://hisoap.jugem.jp/?eid=156 を参考に,以下のように記述しています。 CvCapture *capture srcImage = cvQueryFrame(capture); Bitmap^ bmpPicBox = gcnew Bitmap(pictureBox->Width, pictureBox->Height); pictureBox->Image = bmpPicBox; Graphics^g = Graphics::FromImage(pictureBox->Image); Bitmap^ bmp = gcnew Bitmap(pictureBox->Width, pictureBox->Height, srcImage->widthStep,System::Drawing::Imaging::PixelFormat::Format24bppRgb, IntPtr(srcImage->imageData)); g->DrawImage(bmp, 0, 0, srcImage->width , srcImage->height); どのようにすれば,画像をpictureBoxにぴったりと表示させることができるでしょうか?

  • 【C#】GraphicsのhDcについて

    C#でアプリケーションを作成しています。 PictureBoxに読み込んだ画像を画像処理ライブラリにGraphicsのhDcを渡し、処理をさせたいのですが、 Bitmap bmp = new Bitmap("ファイル名"); pictureBox1.Image = bmp; Graphics g = Graphics.fromImage(pictureBox1.Image); IntPtr hdc = g.GetHdc(); というふうに作った[hdc]を渡すと真っ黒な画像が表示されてしまいます。 ピクチャーボックス1のPaintイベント pictureBox1_Paint(object sender, PaintEventArgs e) { // pictureBox1.Imageには上と同じ画像を読み込み済み IntPtr hdc = e.Graphics.GetHdc(); } というふうに作った[hdc]を渡すと、正常に処理された画像が表示されます。 質問なのですが、PictureBox1.Imageから作ったGraphicsとPaintEventArgs.Graphicsはどのような差があるのでしょうか? また、PaintEventArgsを使わず同じようなGraphicsを作るにはどうしたらいいでしょうか? 至らない説明で申し訳ありませんが、ご助言をよろしくお願いします。

  • VB 特定フォルダ内の画像のサムネイル表示

    VB 特定フォルダ内の画像のサムネイル表示 VisualBasic2008 ExpressEditionにてVBを勉強中の者です。 現在作成しようとしているものは指定したフォルダ内の画像を サムネイル表示し、サムネイルの画像をダブルクリックしたら 拡大表示するものです。 はじめPictureBoxを20個並べて用意してやっていたのですが、 指定されたフォルダ内の画像の数が10枚~50枚を超える場合も あり、ファイル数に応じて動的にサムネイルを作成・表示する 方法がないかと思いまして質問しました。 同じような質問をgoogle等で調べて見ましたが具体的にどうする のかわかりませんでした。 よろしくお願いします。

  • C# 画像ファイルの更新

    C#を始めて2ヶ月余りの者です。 環境はW.7 C#.NET 2013です。 現在、以前C-Builderで作成したプログラムをC#に変換して居ます。 画像マスターを変更する所で、コンパイル出来なく成り、困って居ます。 やりたい事は、画像マスターがあり、これを表示して、マスターを変更したければカメラから読み込んだ画像を画像マスターに書き込むと言うものです。 C-Builderの時はBMPの読み書きは自分で作成しましたが、C#では関数があるので今回はこれを利用しました。 内容を簡略的に下に記述しました。AAAが画像マスターでBBBがカメラからの画像の代わりです。 ここで bmpSource1.Save(sCurDir + "\\BBB.bmp"); を実行すると、「別のプロセスで使用されているため、プロセスは ファイル~にアクセスできません。」とのエラーが表示されます。 良く考えてみれば、Readでオープンしている所に書き込もうとして居るのでエラーに成って当たり前ですので、bmpSource1 = new Bitmap(sCurDir + "\\AAA.bmp");の後に画像を別の場所に保存し、bmpSource1.Dispose();としてみた所、上手く行きませんでした。これもDisposeするのはバッファーであり、ファイルでは無いから当たり前かも知れません。 ネットで色々探して居る時に、何かのパラメーターでReadWriteモードの所を見つけましたが、bmpSource1 = new Bitmap(sCurDir + "\\AAA.bmp");には指定するパラメーターが見当たりませんでした。 何方か、画像ファイルの更新方法がお分かりに成る方、ご教授下さい。 よろしくお願い致します。 String sCurDir = System.IO.Directory.GetCurrentDirectory(); Bitmap bmpSource1; Bitmap bmpSource2; public Form1() { InitializeComponent(); pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage; bmpSource1 = new Bitmap(sCurDir + "\\AAA.bmp"); bmpSource2 = new Bitmap(sCurDir + "\\BBB.bmp"); pictureBox1.Image = bmpSource1; bmpSource2.Save(sCurDir + "\\AAA.bmp"); <-ここで実行時エラー }

  • PowerPointのスライドからはみ出た画像も含めてスライドショーで表示する方法を教えて下さい

    PowerPointでスライドを作成した際、スライドからはみ出て画像を配置しても、スライドショーにするとはみ出た部分は表示されずに消えてしまいます。 はみでた部分も含めてスライドショーに表示することは不可能なのでしょうか?どこかオプションを変更したりすると表示できるようになるのでしょうか? スライドの右下にスライドからはみ出して画像を配置し、スライドショーにすると、 スライドが画面の左上に少し縮小された大きさで配置され、画像が画面の右下といった配置になるのが理想です。 PowerPointはあまり使い慣れないため見当違いな事を申し上げていたら申し訳ありません。 PowerPointは2007を使用しております。 説明が分かりにくいかと思いますが宜しくお願いします。

  • 保存について教えて!!

    pictureboxに編集したグラフィックを表示することはできたのですが、保存することができません。 SavePicture Picture1.picture,"c:\***.bmp"のように書いたのですが保存できません… 上ので出来なかったのは多分SavePictureステートメントはBMPファイルのみをサポートしているためだと思います。編集後のグラフィックはBMPファイルではないから保存ができないと思うんですが、BMPファイルじゃなくても保存できる方法あったら是非是非教えて下さい★

  • (VB.net)画像の一部を切り取って,拡大・縮小したい

    内容を見ていただき,ありがとうございます。 タイトルのままですが,PictureBoxに画像を出して,その一部を切り取ったうえで拡大・縮小させるプログラムを作成しています。 今のところ,画像の一部を切り出すことはできたのですが,これを拡大・縮小させる方法をご存じないでしょうか。画像の一部を切り出すソースは以下のとおりです。 まず,フォームにピクチャボックス(PictureBox1)とコマンドボタン(Button1)を配置し,ソリューションを置いているフォルダ内のbinフォルダにWinter.jpg(WinXPのマイピクチャに入っているものです)を入れておきます。次に,Button1のコードとして,以下のものを打ち込みました。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 'Bitmapオブジェクトの作成(切り取り元画像の指定) Dim bmap = New Bitmap("winter.jpg") '切り取る範囲をRectanleで指定 Dim rect As New Rectangle(10, 20, 100, 200) 'PictureBox1のGraphicsオブジェクトの作成 Dim g As Graphics = PictureBox1.CreateGraphics() '元の画像の指定部分を切り取ってPictureboxの左上隅(x,y = 0,0)に表示する.単位はピクセル. g.DrawImage(bmap, 0, 0, rect, GraphicsUnit.Pixel) 'Graphicsオブジェクトを破棄 g.Dispose() End Sub 以上です。 おそらく,DrawImageの部分を変えればいけるのではないかと思われるのですが,いかがでしょうか。ご助言よろしくお願いいたします。

  • VisualBasic で画像の切り抜きを行いたい!

    VisualBasicで既存の画像ファイル(BMPやJPG)から、特定の個所のみ切り抜きを行いたいのですが、うまくいきません。 APIのBitBlt関数を使ってみたのですが、画面上に表示されている部分は切り抜きできますが、写真が大きいため、画面からはみ出ている部分は切り抜くことができませんでした。。。 どなたかご存知の方いますでしょうか? よろしくお願いいたします。