Beispiel #1
0
	bool UIAlgorithm::gaussBlur(HWND hWnd, HDC hdcCompatible, HBITMAP hbm,  BlurEffectParam* param)
    {
        RECT rect;
        ::GetWindowRect(hWnd, &rect);

        int w = rect.right - rect.left;
        int h = rect.bottom - rect.top;

        int * data = new int[w * h];

        BITMAPINFO infoHeader;
        memset(&infoHeader.bmiHeader, 0, sizeof(BITMAPINFOHEADER));
        infoHeader.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
        infoHeader.bmiHeader.biWidth = w;
        infoHeader.bmiHeader.biHeight = -h;
        infoHeader.bmiHeader.biPlanes = 1;
        infoHeader.bmiHeader.biBitCount = 32; // 这里建议用32,经过测试在我的机器上比24速度快比较多
        infoHeader.bmiHeader.biCompression = BI_RGB;	

        ::GetDIBits(hdcCompatible, hbm, 0, h, data, &infoHeader, DIB_RGB_COLORS);
        if(!gaussBlur(data, w, h, param->dSigma, param->nRadius))
            return false;

        SetDIBits(hdcCompatible, hbm, 0, abs(infoHeader.bmiHeader.biHeight), data, &infoHeader, DIB_RGB_COLORS);  

        return true;
    }
IntensityMap GaussianBlur::calculate(IntensityMap &input, double radius, bool tileable) {
    IntensityMap result = IntensityMap(input.getWidth(), input.getHeight());

    gaussBlur(input, result, radius, tileable);

    return result;
}
Beispiel #3
0
	void CBlurCompositor::render(ISceneManager* smgr, bool lastCompositor)
	{
		switch (mBlurAlgorithm)
		{
		case SCompositorCreateParam::EBLUR_NEAR_POINTS_4:
		case SCompositorCreateParam::EBLUR_NEAR_POINTS_8:
			squareBlur(smgr, lastCompositor);
			break;
		case SCompositorCreateParam::EBLUR_GAUSSIAN:
			gaussBlur(smgr, lastCompositor);
			break;
		default:
			break;
		}
	}