예제 #1
0
void TestKoIntegerMaths::UINT8Tests()
{
    QCOMPARE((int)UINT8_MULT(0, 255), 0);
    QCOMPARE((int)UINT8_MULT(255, 255), 255);

    QCOMPARE((int)UINT8_MULT(128, 255), 128);
    QCOMPARE((int)UINT8_MULT(255, 128), 128);

    QCOMPARE((int)UINT8_MULT(1, 255), 1);
    QCOMPARE((int)UINT8_MULT(1, 127), 0);
    QCOMPARE((int)UINT8_MULT(64, 128), 32);

    QCOMPARE((int)UINT8_DIVIDE(255, 255), 255);
    QCOMPARE((int)UINT8_DIVIDE(64, 128), 128);
    QCOMPARE((int)UINT8_DIVIDE(1, 64), 4);
    QCOMPARE((int)UINT8_DIVIDE(0, 1), 0);

    for (int i = 0; i < 256; i++) {
        QCOMPARE((int)UINT8_BLEND(255, 0, i), i );
    }
    for (int i = 0; i < 256; i++) {
        QCOMPARE((int)UINT8_BLEND(0, 255, i), int( 255 - i) );
    }
    for (int i = 0; i < 256; i++) {
        QVERIFY( qAbs(int(UINT8_BLEND(0, i, 128)) - int(i*(255 - 128) / 255.0 + 0.5)) <= 1 );
    }
    QCOMPARE((int)UINT8_BLEND(255, 128, 128), 192);
    QCOMPARE((int)UINT8_BLEND(128, 64, 255), 128);
}
    void transform(const quint8 *src, quint8 *dst, qint32 nPixels) const override
    {
        while (nPixels > 0) {

            *dst = UINT8_MULT(src[0], src[1]);

            src += 2;
            dst ++;
            nPixels --;
        }
    }