![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
VC2005のMFCで画像を表示させているのですが、透過表示する方法がわかりません。
OnDraw(CDC* pDC)
で、#include <atlimage.h>として、
CImage img;
img.Load( "test.gif" );
CDC* pDCImg = CDC::FromHandle( img.GetDC() );
pDC->BitBlt( 60, 10, img.GetWidth(), img.GetHeight(), pDCImg, 0, 0, SRCCOPY );
img.ReleaseDC();
すればGIF画像が表示されましたが、このGIG画像は透過GIFですが
そのまま表示されているので、背景が黒の場合透、明部分の白が見えて
四角い枠の画像となります。
GIF透過ファイルの場合、そのまま透過になる方法や、何か手段を用いて透過をさせたいです。
No.3ベストアンサー
- 回答日時:
ごめんなさい GetColorTableなどは使えないようです
当方で実験したところ gifを読み込んだ時点の CImageクラス内部での表現が現在のWindowsシステムの設定に依存するようです
256色パレットモードではなく 32ビットのBMPとして取り込まれていました
したがって CDCのTrabsparentBltで行ったほうが良いでしょう
int w = img.GetWidth();
int h = img.GetHeight();
COLORREF col = img.GetPixel( 0, 0 );
pDC->TransparentBlt( 0, 0, w, h, pDCImg, 0, 0, w, h, col );
またパレットが取得できる場合の検索方法ですが
COLORREF col = img.GetPixel( 0, 0 );
RGBQUAD pal[256];
img.GetColorTable( 0, 256, pal );
int nIndex = -1;
for n = 0; n < 256; n++ ) {
if ( ( pal[n].rgbRed == ( col & 0xFF ) ) &&
( pal[n].rgbGreen == ( ( col & 0xFF00 ) >> 8 ) ) &&
( pal[n].rgbBlue == ( ( col & 0xFF0000 ) >> 16 ) ) ) {
nIndex = n;
break;
}
}
img.SetTransparentColor( nIndex );
といった具合でしょう ...
# 思いつきで投稿するとこういったポカをやります m(__)m
No.2
- 回答日時:
GIF画像ならパレットは256色です
RGBQUAD pal[256], col;
int n = 0, nIndex = 0;
img.GetColorTable( 0, 256, pal );
col = img.GetPixel( 0, 0 );
nIndex = -1;
for( n = 0; n < 256; n++ ) {
if ( col == pal[n] ) {
nIndex = n;
break;
}
}
if ( nIndex > -1 ) {
img.SetTransParent( nIndex );
}
といった具合で検索できないかなぁ
回答ありがとうございます。
コードを試したところ、
col = img.GetPixel( 0, 0 );
if ( col == pal[n] ) {
の場所で
error C2679: 二項演算子 '=' : 型 'COLORREF' の右オペランドを扱う演算子が見つかりません (または変換できません)。
となりました。
colはint型の数値ならうまくいきますが、比較の際にRGB+予約が異なるのでうまくいきません。
今は、マスクで透明にする方法で何とか目的達成しておりますが、
このパレットの考えた方も取り入れたいです。
No.1
- 回答日時:
カラーパレットの何番の色が透過色に設定されているのかわかっていないと無理ですが
たとえば パレット番号0だとするなら
CImage img;
img.Load( "test.gif" );
// これを追加
Img.SetTansparentColor( 0 );
CDC* pDCImg = CDC::FromHandle( img.GetDC() );
pDC->BitBlt( 60, 10, img.GetWidth(), img.GetHeight(), pDCImg, 0, 0, SRCCOPY );
img.ReleaseDC();
といった具合かと ...
どこかの指定位置のピクセルデータから透過色を判別できるなら
GetColorTableでパレット情報を取得して GetPixelで指定位置の色情報を取得して GetColorTableで取得したテーブルを探索しましょう
この回答への補足
回答ありがとうございます。
カラーパレット番号がわからず0からいけるところまで試してみましたが
透過になりませんでした。
画像は IrfanView(フリーソフト)のメニュー画像のパレット - パレット編集で見ましたが、白は6番目でしたのでSetTansparentColor( );
の引数に数値の6や5を設定しましたが、ダメでした。
>どこかの指定位置のピクセルデータから透過色を判別できるなら
>GetColorTableでパレット情報を取得して GetPixelで指定位置の色情報を取得して GetColorTableで取得したテーブルを探索しましょう
画像の透過させたい位置は分かっていますので、この方法を試してみたいのですが、具体的にどうすればよいのでしょうか?
最終的にマスクの方法をとるしかないのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS 角丸画像の背景色を透明にしたいです 1 2023/06/23 23:15
- Perl 画像が表示でnull; this.src 1 2022/04/19 11:31
- その他(ソフトウェア) ペイントで切り抜いた画像の背景を透明に 2 2022/09/15 10:20
- JavaScript アップロードファイルの種類によって処理を分岐させたいのですが書き方が分からずアドバイスお願いします 4 2023/06/17 19:12
- Photoshop(フォトショップ) フォトショップで切り抜いた画像を透明にするには 3 2022/09/15 11:50
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- JavaScript jQueryで同じクラス名のものを別物として扱いたい 1 2022/06/17 14:14
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- Illustrator(イラストレーター) Illustratorで白い部分のみを透過させたいです。 2 2022/10/10 22:27
- HTML・CSS flex の各子要素を横幅 100% にしたい 1 2022/09/22 21:25
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
画面を強制的に再描画させる方法
C言語・C++・C#
-
MFCでbitmapを背景にしてstaticテキストを透過させる方法
C言語・C++・C#
-
MFCでOnPaintのタイミング
C言語・C++・C#
-
-
4
ビットマップ(bmp)形式で背景を透過にできる?
画像編集・動画編集・音楽編集
-
5
CStaticコントロールの静的イメージ描画
C言語・C++・C#
-
6
VC++プログラムをつかったBMP画像の拡大縮小について
C言語・C++・C#
-
7
CImageクラスの使用について
C言語・C++・C#
-
8
ビットマップに描画をしてピクチャーコントロールに貼り付けるためには?
C言語・C++・C#
-
9
MFCダイアログボックスを最前面に表示
C言語・C++・C#
-
10
CStringのFindで文字列検索を行いたいのですが
C言語・C++・C#
-
11
MFC - ダイアログボックスのPictureControlへの画像表示
C言語・C++・C#
-
12
CFileDialogの最初のディレクトリ設定
C言語・C++・C#
-
13
ダイアログ内コントロールの位置取得について
C言語・C++・C#
-
14
Windowsプログラミング:BitBltで半透明な透かしを作りたい
C言語・C++・C#
-
15
RGBのバイナリデータをCImageにコピー
C言語・C++・C#
-
16
ボタンの配置を変更したい
C言語・C++・C#
-
17
ビットマップを表示させる(MFC)
C言語・C++・C#
-
18
Visual Studioでのbmpファイルの背景透明化
C言語・C++・C#
-
19
コンボボックスのドロップダウンリストが表示されない
C言語・C++・C#
-
20
ダイアログボックスで指定したサイズどおり表示されない
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
MFCで画像を表示させているので...
-
Vb.net2005での画像の合成方法
-
条件分岐でキーが入力されてい...
-
画像が表示でnull; this.src
-
jqueryスライドショーをストッ...
-
javascriptでのパスについて
-
ASP.NETで、配列は使えな...
-
JavaScriptで変更した属性の元...
-
Accessible News Sliderついて
-
html内にスライドショーを複数設置
-
MAX関数を使ってからLEFT JOIN...
-
【iOS及びAndroid】リンク画像...
-
JSPでの画像ファイル表示
-
javascriptテキストBOX色を元に...
-
連番画像「次へ」「前へ」で、...
-
中心を軸にくるくる回るjQuery ...
-
大量のチェックボックス状態取...
-
リンク先がそれぞれ別の画像の...
-
htmlとcssに関する質問です
-
window.openで値の渡し方を教え...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
JavaScriptで変更した属性の元...
-
MFCで画像を表示させているので...
-
【OpenCV】二値画像後、白の部...
-
外部javascriptの重複を防ぐには
-
Vb.net2005での画像の合成方法
-
pythonで、tkinterとpillowの組...
-
html内にスライドショーを複数設置
-
ラズパイでno module named zbar
-
リンク先を動的に変更する
-
プログラムの上手な書き方は?
-
libjpegライブラリの使い方につ...
-
外部ファイルにしたら文字化け...
-
pythonのpygameでキャラクター...
-
複数画像のランダム複数表示(...
-
error LNK2019 未解決のシンボ...
-
nodejsの画像表示は特別なこと...
-
imageクラスからiconクラスに変...
-
imgボタンにfocusの当て方
-
OpenCVで固定枠で画像を操作す...
-
<noscript>と</a>の関係
おすすめ情報