本文整理匯總了C++中AlphaBlend函數的典型用法代碼示例。如果您正苦於以下問題:C++ AlphaBlend函數的具體用法?C++ AlphaBlend怎麽用?C++ AlphaBlend使用的例子?那麽, 這裏精選的函數代碼示例或許可以為您提供幫助。
在下文中一共展示了AlphaBlend函數的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的C++代碼示例。
示例1: ink
inline void ink( PIX* pix, int step, int a )
{
int ia = ALPHA_MAX - a;
AlphaBlend( *(pix-step), m_r, m_g, m_b, a, ia );
*(pix) = m_c;
AlphaBlend( *(pix+step), m_r, m_g, m_b, ia, a );
}
示例2: BitBlt
void image::alphaRender(HDC hdc, int destX, int destY, int sourX, int sourY, int sourWidth, int sourHeight, bool reverse, BYTE alpha, BOOL bAlphaFormat)
{
_blendFunc.SourceConstantAlpha = alpha;
if (bAlphaFormat) _blendFunc.AlphaFormat = AC_SRC_ALPHA;
HDC hTempDC;
if (reverse)
{
hTempDC = _imageInfo->hMemDC2;
}
else
{
hTempDC = _imageInfo->hMemDC;
}
if (_trans)
{
//출력해야될DC에 그려져있는 내용을 Blend에 그린다.
BitBlt(_blendImage->hMemDC, 0, 0, _imageInfo->width, _imageInfo->height,
hdc, destX, destY, SRCCOPY);
//출력해야될 이미지를 Blend에 그린다.
GdiTransparentBlt(_blendImage->hMemDC, 0, 0, sourWidth, sourHeight,
hTempDC, sourX, sourY, sourWidth, sourHeight, _transColor);
//BlendDC를 출력해야 될 DC에 그린다.
AlphaBlend(hdc, destX, destY, sourWidth, sourHeight, _blendImage->hMemDC,
0, 0, sourWidth, sourHeight, _blendFunc);
}
else
{
AlphaBlend(hdc, destX, destY, sourWidth, sourHeight, hTempDC,
sourX, sourY, sourWidth, sourHeight, _blendFunc);
}
}
示例3: BitBlt
void image::alphaRender(HDC hdc, int destX, int destY, int sourX, int sourY, int sourWidth, int sourHeight, BYTE alpha)
{
if (!_blendImage) alphaInit();
_blendFunc.SourceConstantAlpha = alpha;
if (_trans)
{
//출력해야 될 DC에 그려져 있는 내용을 blend에 그려준다
BitBlt(_blendImage->hMemDC, 0, 0, _imageInfo->width, _imageInfo->height,
hdc, destX, destY, SRCCOPY);
//출력해야 될 이미지를 blend에 그려준다
GdiTransparentBlt(_blendImage->hMemDC, 0, 0, sourWidth, sourHeight,
_imageInfo->hMemDC, sourX, sourY, sourWidth, sourHeight, _transColor);
//blendDC를 출력해야 될 DC에 그린다
AlphaBlend(hdc, destX, destY, sourWidth, sourHeight,
_blendImage->hMemDC, 0, 0, sourWidth, sourHeight, _blendFunc);
}
else
{
AlphaBlend(hdc, destX, destY, sourWidth, sourHeight,
_imageInfo->hMemDC, sourX, sourY, sourWidth, sourHeight, _blendFunc);
}
}
示例4: MirrorLeft
void ac::MirrorAll(cv::Mat &frame) {
cv::Mat copies[4];
for(int i = 0; i < 4; ++i)
copies[i] = frame.clone();
MirrorLeft(copies[0]);
MirrorRight(copies[1]);
MirrorTopToBottom(copies[2]);
MirrorBottomToTop(copies[3]);
cv::Mat out[2];
AlphaBlend(copies[0], copies[1], out[0], 0.5);
AlphaBlend(copies[2], copies[3], out[1], 0.5);
AlphaBlend(out[0], out[1], frame, 0.5);
AddInvert(frame);
}
示例5: ShuffleAlpha
void ac::ShuffleAlphaWithRGB(cv::Mat &frame) {
cv::Mat copy1 = frame.clone(), copy2 = frame.clone();
ShuffleAlpha(copy1);
ShuffleRGB(copy2);
AlphaBlend(copy1, copy2, frame, 0.5);
AddInvert(frame);
}
示例6: Smooth
void ac::ImageReverseSubFilter(cv::Mat &frame) {
if(blend_set == false || subfilter == -1 || ac::draw_strings[subfilter] == "ImageReverseSubFilter")
return;
cv::Mat reimage;
cv::resize(blend_image, reimage, frame.size());
cv::Mat all_frames[3];
cv::flip(frame, all_frames[0], -1);
cv::flip(frame, all_frames[1], 0);
cv::flip(frame, all_frames[2], 1);
cv::Mat copy1 = frame.clone(), copy2 = frame.clone();
for(int z = 0; z < copy1.rows; ++z) {
for(int i = 0; i < copy1.cols; ++i){
cv::Vec3b &pixel = copy1.at<cv::Vec3b>(z, i);
cv::Vec3b pix[4];
for(int j = 0; j < 3; ++j) {
pix[j] = all_frames[j].at<cv::Vec3b>(z, i);
}
for(int j = 0; j < 3; ++j) {
pixel[j] = pix[0][j] ^ pix[1][j] ^ pix[2][j] ^ pixel[j];
}
}
}
static MatrixCollection<8> collection;
Smooth(copy1, &collection);
CallFilter(subfilter, reimage);
Xor(reimage, copy1);
AlphaBlend(reimage, copy2, frame, 0.5);
DarkenFilter(frame);
MedianBlend(frame);
}
示例7: CrashIf
// based on http://theartofdev.wordpress.com/2013/10/24/transparent-text-rendering-with-gdi/,
// TODO: look into using http://theartofdev.wordpress.com/2014/01/12/gdi-text-rendering-to-image/
// TODO: doesn't actually look good (i.e. similar to DrawText when using transparent SetBkMode())
// which kind of makes sense, because I'm using transparent mode to draw to in-memory bitmap as well
// TODO: doesn't actually do alpha bf.SourceConstantAlpha > 4 looks the same, values 1-4 produce
// different, but not expected, results
// TODO: I would like to figure out a way to draw text without the need to Lock()/Unlock()
// maybe draw to in-memory bitmap, convert to Graphics bitmap and blit that bitmap to
// Graphics object
void TextRenderGdi::DrawTransparent(const WCHAR *s, size_t sLen, RectF& bb, bool isRtl) {
CrashIf(!hdcGfxLocked); // hasn't been Lock()ed
int x = (int) bb.X;
int y = (int) bb.Y;
int dx = (int) bb.Width;
int dy = (int) bb.Height;
CreateClearBmpOfSize(dx,dy);
//SetBkMode(hdcGfxLocked, 1);
SetBkMode(memHdc, TRANSPARENT);
//BitBlt(memHdc, 0, 0, dx, dy, hdcGfxLocked, x, y, SRCCOPY);
SelectObject(memHdc, currFont);
::SetTextColor(memHdc, textColor.ToCOLORREF());
#if 0
TextOut(memHdc, 0, 0, s, sLen);
#else
UINT opts = 0; //ETO_OPAQUE;
if (isRtl)
opts = opts | ETO_RTLREADING;
ExtTextOut(memHdc, 0, 0, opts, nullptr, s, (UINT)sLen, nullptr);
#endif
BLENDFUNCTION bf = {};
bf.BlendOp = AC_SRC_OVER;
bf.BlendFlags = 0;
bf.AlphaFormat = 0; // 0 - ignore source alpha, AC_SRC_ALPHA (1) - use source alpha
bf.SourceConstantAlpha = 0x3; //textColor.GetA();
AlphaBlend(hdcGfxLocked, x, y, dx, dy, memHdc, 0, 0, dx, dy, bf);
}
示例8: CalculateRectByDrawParam
BOOL CSonicImage::InternalDraw(HDC hdc, int x, int y, DRAW_PARAM * pDp)
{
CRect rtSrc, rtDest;
rtDest = CalculateRectByDrawParam(x, y, pDp, rtSrc);
if(IsAlphaChannelValid() || (pDp && (pDp->dwMask & DP_ALPHA)))
{
BLENDFUNCTION blend;
blend.AlphaFormat = AC_SRC_ALPHA;
blend.BlendFlags = 0;
blend.BlendOp = AC_SRC_OVER;
blend.SourceConstantAlpha = (pDp && (pDp->dwMask & DP_ALPHA)) ? pDp->cAlpha : 255;
AlphaBlend(hdc, rtDest.left, rtDest.top, rtDest.Width(), rtDest.Height(), m_Dib.GetSafeHdc(), rtSrc.left, rtSrc.top, rtSrc.Width(), rtSrc.Height(), blend);
}
else
{
if(pDp && (pDp->dwMask & DP_COLOR_KEY))
{
TransparentBlt(hdc, rtDest.left, rtDest.top, rtDest.Width(), rtDest.Height(), m_Dib.GetSafeHdc(), rtSrc.left, rtSrc.top, rtSrc.Width(), rtSrc.Height(), pDp->dwColorKey);
}
else if(pDp && (pDp->dwMask & DP_DEST_LIMIT || pDp->dwMask & DP_SCALE))
{
StretchBlt(hdc, rtDest.left, rtDest.top, rtDest.Width(), rtDest.Height(), m_Dib.GetSafeHdc(), rtSrc.left, rtSrc.top, rtSrc.Width(), rtSrc.Height(), SRCCOPY);
}
else
{
BitBlt(hdc, rtDest.left, rtDest.top, rtDest.Width(), rtDest.Height(), m_Dib.GetSafeHdc(), rtSrc.left, rtSrc.top, SRCCOPY);
}
}
return TRUE;
}
示例9: GetDC
//////////////////////////////////////////////////////////////////////////
// 畫透明異形圖的函數
// 注:在這裏特別感謝CSDN網友: 黃凱飛, ID: hkf314
void CAnimateButton::AlphaBitmap(int nItem)
{
CDC* pDC = GetDC();
CDC TmpDC;
TmpDC.CreateCompatibleDC(pDC);
//當然,TmpBmp用來記錄畫的內容
CBitmap TmpBmp;
TmpBmp.CreateCompatibleBitmap(pDC, m_aniBtnWidth, m_aniBtnHeight);
TmpDC.SelectObject(&TmpBmp);
//把按鈕下的背景拷貝過來
TmpDC.BitBlt(0, 0, m_aniBtnWidth, m_aniBtnHeight, pDC, 0, 0, SRCCOPY);
//把內存DC中的圖像透明地畫出來
AlphaBlend(TmpDC.m_hDC, 0, 0, m_aniBtnWidth, m_aniBtnHeight, m_pMemDC->m_hDC,
nItem * m_aniBtnWidth, 0, m_aniBtnWidth, m_aniBtnHeight, m_bf);
//填充異形圖像以外的區域為mask色
CRgn rgn;
rgn.CreateRectRgn(0, 0, m_aniBtnWidth, m_aniBtnHeight);
rgn.CombineRgn(&rgn, CRgn::FromHandle(m_arBmpRgn[nItem]), RGN_DIFF);
// TRACE("CRgn::FromHandle(m_arBmpRgn[nItem]): %d\n", nItem);
CBrush maskBrh;
maskBrh.CreateSolidBrush(m_clrTrans);
TmpDC.FillRgn(&rgn, &maskBrh);
// TmpDC.FillRgn(CRgn::FromHandle(m_arBmpRgn[nItem]), &maskBrh);
//摳除mask色,直接畫出來
::TransparentBlt(pDC->m_hDC, 0, 0, m_aniBtnWidth, m_aniBtnHeight, TmpDC.m_hDC,
0, 0, m_aniBtnWidth, m_aniBtnHeight, m_clrTrans);
// pDC->BitBlt(0, 0, m_aniBtnWidth, m_aniBtnHeight, &TmpDC, 0, 0, SRCCOPY);
// pDC->FillRgn(CRgn::FromHandle(m_arBmpRgn[nItem]), &maskBrh);
ReleaseDC(pDC);
}
示例10: GetRelativeCoordinate
bool CDDB::PutBitmap( int x, int y, CDC *pDC, int xSrc, int ySrc, int dxSrc, int dySrc, int width, int height, DWORD dwRop, int alpha)
{
// Coordinate mode is not relative
if ( m_CoordinateMode != CM_RELATIVE)
GetRelativeCoordinate( &xSrc, &ySrc, &dxSrc, &dySrc);
// Copy alphablended memory DC
if ( alpha < 255)
{
BLENDFUNCTION blendFunc = { AC_SRC_OVER, 0, alpha, 0 };
// Copy memory bitmap
AlphaBlend( m_DC, x, y, width, height, pDC->m_hDC, xSrc, ySrc, dxSrc, dySrc, blendFunc);
}
// Copy transparent memory DC
else if ( dwRop == TRANSPARENT)
{
// Copy memory bitmap
TransparentBlt( m_DC, x, y, width, height, pDC->m_hDC, xSrc, ySrc, dxSrc, dySrc, m_nTransColor);
}
// Copy memory DC
else
{
// Copy memory bitmap
m_DC.StretchBlt( x, y, width, height, pDC, xSrc, ySrc, dxSrc, dySrc, dwRop);
}
return true;
}
示例11: ImageArray_DrawImage
BOOL ImageArray_DrawImage(IMAGE_ARRAY_DATA *iad, int pos, HDC hdcDest, int nXDest, int nYDest, BYTE Alpha)
{
if (hdcDest == NULL || pos < 0 || pos >= iad->nodes_size)
return FALSE;
EnterCriticalSection(&iad->cs);
{
int w, h, i;
if (iad->width_based) {
w = 0;
h = 0;
for (i = 0; i < pos; i++) {
h += iad->nodes[i].height;
}
}
else {
h = 0;
w = 0;
for (i = 0; i < pos; i++) {
w += iad->nodes[i].width;
}
}
BLENDFUNCTION bf = { AC_SRC_OVER, 0, Alpha, AC_SRC_ALPHA };
AlphaBlend(hdcDest, nXDest, nYDest, iad->nodes[pos].width, iad->nodes[pos].height, iad->hdc, w, h, iad->nodes[pos].width, iad->nodes[pos].height, bf);
}
LeaveCriticalSection(&iad->cs);
return FALSE;
}
示例12: MirrorOrder
void ac::MirrorOrderAlpha(cv::Mat &frame) {
cv::Mat copy1 = frame.clone(), copy2 = frame.clone();
MirrorOrder(copy1);
MirrorXorAll(copy2);
AlphaBlend(copy1, copy2, frame, 0.5);
MedianBlend(frame);
}
示例13: Random_Filter
void ac::OrigAndCurrentRandomX2(cv::Mat &frame) {
cv::Mat copy1 = frame.clone(), copy2 = orig_frame.clone();
Random_Filter(copy1);
Random_Filter(copy2);
AlphaBlend(copy1, copy2, frame, 0.5);
AddInvert(frame);
}
示例14: MirrorTopToBottom
void ac::MirrorTopMirrorBottomBlend(cv::Mat &frame) {
cv::Mat copy1 = frame.clone(), copy2 = frame.clone();
MirrorTopToBottom(copy1);
MirrorBottomToTop(copy2);
AlphaBlend(copy1, copy2, frame, 0.5);
AddInvert(frame);
}
示例15: CallFilter
void ac::StretchSubFilter(cv::Mat &frame) {
if(subfilter == -1 || draw_strings[subfilter] == "StretchSubFilter")
return;
static int w = 2, h = 2, speed = 5, dir = 100;
if(dir == 1) {
w += speed;
h += speed;
if(w > (frame.cols-1) || (h > frame.rows-1)) {
dir = 0;
w = frame.cols-2;
h = frame.rows-2;
}
} else {
w -= speed;
h -= speed;
if(w <= 64 || h <= 64) {
dir = 1;
w = 64;
h = 64;
}
}
cv::Mat copy1 = frame.clone(), copy2 = frame.clone(), reimage;
cv::resize(frame, copy1, cv::Size(w, h));
CallFilter(subfilter, copy1);
cv::resize(copy1, reimage, frame.size());
AlphaBlend(copy2, reimage, frame, 0.5);
AddInvert(frame);
}