天天看點

代碼_圖像_顔色替換

/*
*顔色替換函數
*輸入:待替換的圖像指針,替換前顔色,替換後的顔色,CDC容器
*輸出:替換後的圖像指針
*/

CBitmap* abc::replaceColor(CBitmap *b_bmp,COLORREF res,COLORREF aim,CDC *cdc)
{
	CDC m_cdc,b_cdc;
	CBitmap m_bmp;
	BITMAP bitmap;
	b_bmp->GetBitmap(&bitmap);
	CRect rect(0,0,bitmap.bmWidth,bitmap.bmHeight);
	//建立适配的遮罩層圖像,裝置,并裝入
	m_bmp.CreateBitmap(bitmap.bmWidth,bitmap.bmHeight,1,1,NULL);
	m_cdc.CreateCompatibleDC(cdc);
	b_cdc.CreateCompatibleDC(cdc);
	m_cdc.SelectObject(&m_bmp);
	b_cdc.SelectObject(b_bmp);
	//将替換前顔色設定為黑色
	b_cdc.SetBkColor(res);
	m_cdc.BitBlt(0,0,bitmap.bmWidth,bitmap.bmHeight,&b_cdc,0,0,SRCCOPY);
	b_cdc.SetBkColor(RGB(0,0,0));
	b_cdc.SetTextColor(RGB(255,255,255));
	b_cdc.BitBlt(0,0,bitmap.bmWidth,bitmap.bmHeight,&m_cdc,0,0,SRCAND);
	//将替換前顔色替換為目标顔色
	b_cdc.SetBkColor(aim);
	b_cdc.SetTextColor(RGB(0,0,0));
	b_cdc.BitBlt(0,0,bitmap.bmWidth,bitmap.bmHeight,&m_cdc,0,0,SRCPAINT);
	return	b_bmp;
}