Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ libVLC与模糊视频_C++_Qt_Qml_Libvlc - Fatal编程技术网

C++ libVLC与模糊视频

C++ libVLC与模糊视频,c++,qt,qml,libvlc,C++,Qt,Qml,Libvlc,我制作了一个QtQuick应用程序,我需要制作一个带有视频的声明性小部件(我不想使用QtMobility)。好像,这不是问题。但我不知道怎么做模糊libVLC。 有人知道如何使用libVLC制作模糊视频吗?也许你可以在QImage上使用expoblur并对模糊视频重新编码 静态图像模糊(常量图像和图像、常量矩形和矩形、整数半径、布尔字母=false) { int tab[]={14,10,8,6,5,5,4,3,3,3,2,2,2,2}; int alpha=(半径17)?1:tab[radi

我制作了一个QtQuick应用程序,我需要制作一个带有视频的声明性小部件(我不想使用QtMobility)。好像,这不是问题。但我不知道怎么做模糊libVLC。
有人知道如何使用libVLC制作模糊视频吗?

也许你可以在QImage上使用expoblur并对模糊视频重新编码

静态图像模糊(常量图像和图像、常量矩形和矩形、整数半径、布尔字母=false)
{
int tab[]={14,10,8,6,5,5,4,3,3,3,2,2,2,2};
int alpha=(半径<1)?16:(半径>17)?1:tab[radius-1];
QImage结果=image.convertToFormat(QImage::Format_ARGB32_预乘);
int r1=rect.top();
int r2=rect.bottom();
int c1=矩形左();
int c2=矩形右();
int bpl=result.bytesPerLine();
int-rgba[4];
无符号字符*p;
int i1=0;
int i2=3;
如果(仅字母)
i1=i2=(QSysInfo::ByteOrder==QSysInfo::BigEndian?0:3);

对于(int col=c1;col)这不是正确的方式。部分原因是VLC播放器能够模糊视频。我严重怀疑这不可能使它更容易。我认为这个模糊功能来自VLC插件之一。我不知道如何从libVLC引擎访问插件功能,我需要检查它的文档。
static QImage blurred(const QImage& image, const QRect& rect, int radius, bool alphaOnly = false)
{
    int tab[] = { 14, 10, 8, 6, 5, 5, 4, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2 };
    int alpha = (radius < 1) ? 16 : (radius > 17) ? 1 : tab[radius-1];

    QImage result = image.convertToFormat(QImage::Format_ARGB32_Premultiplied);
    int r1 = rect.top();
    int r2 = rect.bottom();
    int c1 = rect.left();
    int c2 = rect.right();

    int bpl = result.bytesPerLine();
    int rgba[4];
    unsigned char* p;

    int i1 = 0;
    int i2 = 3;

    if (alphaOnly)
        i1 = i2 = (QSysInfo::ByteOrder == QSysInfo::BigEndian ? 0 : 3);

    for (int col = c1; col <= c2; col++) {
        p = result.scanLine(r1) + col * 4;
        for (int i = i1; i <= i2; i++)
            rgba[i] = p[i] << 4;

        p += bpl;
        for (int j = r1; j < r2; j++, p += bpl)
            for (int i = i1; i <= i2; i++)
                p[i] = (rgba[i] += ((p[i] << 4) - rgba[i]) * alpha / 16) >> 4;
    }

    for (int row = r1; row <= r2; row++) {
        p = result.scanLine(row) + c1 * 4;
        for (int i = i1; i <= i2; i++)
            rgba[i] = p[i] << 4;

        p += 4;
        for (int j = c1; j < c2; j++, p += 4)
            for (int i = i1; i <= i2; i++)
                p[i] = (rgba[i] += ((p[i] << 4) - rgba[i]) * alpha / 16) >> 4;
    }

    for (int col = c1; col <= c2; col++) {
        p = result.scanLine(r2) + col * 4;
        for (int i = i1; i <= i2; i++)
            rgba[i] = p[i] << 4;

        p -= bpl;
        for (int j = r1; j < r2; j++, p -= bpl)
            for (int i = i1; i <= i2; i++)
                p[i] = (rgba[i] += ((p[i] << 4) - rgba[i]) * alpha / 16) >> 4;
    }

    for (int row = r1; row <= r2; row++) {
        p = result.scanLine(row) + c2 * 4;
        for (int i = i1; i <= i2; i++)
            rgba[i] = p[i] << 4;

        p -= 4;
        for (int j = c1; j < c2; j++, p -= 4)
            for (int i = i1; i <= i2; i++)
                p[i] = (rgba[i] += ((p[i] << 4) - rgba[i]) * alpha / 16) >> 4;
    }

    return result;
}