diff --git a/ui/image/image_prepare.cpp b/ui/image/image_prepare.cpp index d66b2a5..dea3801 100644 --- a/ui/image/image_prepare.cpp +++ b/ui/image/image_prepare.cpp @@ -1127,20 +1127,25 @@ QImage Colored(QImage &&image, QColor add) { const auto ca = int(add.alphaF() * 0xFF); const auto cr = int(add.redF() * 0xFF); const auto cg = int(add.greenF() * 0xFF); - const auto cb = int(add .blueF() * 0xFF); + const auto cb = int(add.blueF() * 0xFF); const auto w = image.width(); const auto h = image.height(); const auto size = w * h * 4; - for (auto i = index_type(); i != size; i += 4) { - const auto b = pix[i]; - const auto g = pix[i + 1]; - const auto r = pix[i + 2]; - const auto a = pix[i + 3]; - const auto aca = a * ca; - pix[i + 0] = uchar(b + ((aca * (cb - b)) >> 16)); - pix[i + 1] = uchar(g + ((aca * (cg - g)) >> 16)); - pix[i + 2] = uchar(r + ((aca * (cr - r)) >> 16)); - pix[i + 3] = uchar(a + ((aca * (0xFF - a)) >> 16)); + const auto add = image.bytesPerLine() - (w * 4); + auto i = index_type(); + for (auto y = 0; y != h; ++y) { + for (auto to = i + (w * 4); i != to; i += 4) { + const auto b = pix[i]; + const auto g = pix[i + 1]; + const auto r = pix[i + 2]; + const auto a = pix[i + 3]; + const auto aca = a * ca; + pix[i + 0] = uchar(b + ((aca * (cb - b)) >> 16)); + pix[i + 1] = uchar(g + ((aca * (cg - g)) >> 16)); + pix[i + 2] = uchar(r + ((aca * (cr - r)) >> 16)); + pix[i + 3] = uchar(a + ((aca * (0xFF - a)) >> 16)); + } + i += add; } } return std::move(image);