著作権に関する声明:この記事は、CSDNブロガー「koko.1024」の元の記事です。CC4.0BY-SAの著作権契約に従います。再印刷するには、元のソースリンクとこの声明を添付してください。
元のリンク:https://blog.csdn.net/wlzyan/article/details/88019771
mfcにpng透明画像を挿入する方法を記録します。vs2015
を使用して、新たにピットc ++に入り、外部png画像をmfcプロジェクトに挿入します。デフォルトの画像コントロールは、bmp形式の画像を直接ドラッグアンドドロップすることしかできないことがわかりました。次に、インターネットにpng画像をロードする方法を学びました。次に要約します。
新しいプロジェクト
新しいダイアログベースのmfcプロジェクトを作成しますMFC_png
ダイアログボックスインターフェイスに2つの画像コントロールを挿入します。
効果を比較するために、インターフェイスに2つの画像コントロールを挿入し、それぞれIDをIDC_STATIC1、IDC_STATIC2に変更し、
右クリックして画像コントロールを選択し、変数m_img1、m_img2をそれぞれ追加します。
MFC_pngDlg.hを追加します
CImage img;
CRect rect;
MFC_pngDlg.cppに画像透明度処理機能を追加
void TransparentPNG(CImage *png)
{
for (int i = 0; i <png->GetWidth(); i++) //遍历像素处理
{
for (int j = 0; j <png->GetHeight(); j++)
{
byte * pucColor = (byte *)(png->GetPixelAddress(i, j));
pucColor[0] = pucColor[0] * pucColor[3] / 255;
pucColor[1] = pucColor[1] * pucColor[3] / 255;
pucColor[2] = pucColor[2] * pucColor[3] / 255;
}
}
}
確認ボタンのクリックイベントを変更する
void CMFC_pngDlg::OnBnClickedOk()
{
m_img1.GetClientRect(&rect); //获得pictrue控件所在的矩形区域
CDC *dc1 = m_img1.GetDC();//获得pictrue控件1的Dc
CDC *dc2 = m_img2.GetDC();//获得pictrue控件2的Dc
int height, width;
if (!img.IsNull()) img.Destroy();
CString imgPath1 = _T("H:\\temp\\02.png");
img.Load(imgPath1);
height = img.GetHeight();
width = img.GetWidth();
if (!img.IsNull()) img.Draw(dc1->m_hDC, CRect(0, 0, width, height));//图片控件1展示未处理的图片
TransparentPNG(&img); //调用透明化处理函数
if (!img.IsNull()) img.Draw(dc2->m_hDC, CRect(0, 0, width, height));//图片控件2展示处理后的图片
}
ランニング効果効果
を比較するために、背景色を緑に変更しました。
[OK]をクリックすると
、画像ボックス1の画像の透明部分が白で表示されていることがわかります。
画像ボックス2の画像の透明部分は正常に表示されています。
サンプル画像:
————————————————
上図の画像制御フレームは、制御プロパティTypeをOwnerDrawに設定することで非表示にできます。