void BorderFilter::bevel2(DImg& src, DImg& dest, const DColor& topColor, const DColor& btmColor, int borderWidth) { int x, y; int wc; dest = DImg(src.width() + borderWidth * 2, src.height() + borderWidth * 2, src.sixteenBit(), src.hasAlpha()); // top for (y = 0, wc = (int)dest.width() - 1; y < borderWidth; ++y, --wc) { for (x = 0; x < wc; ++x) { dest.setPixelColor(x, y, topColor); } for (; x < (int)dest.width(); ++x) { dest.setPixelColor(x, y, btmColor); } } // left and right for (; y < (int)dest.height() - borderWidth; ++y) { for (x = 0; x < borderWidth; ++x) { dest.setPixelColor(x, y, topColor); } for (x = (int)dest.width() - 1; x > (int)dest.width() - borderWidth - 1; --x) { dest.setPixelColor(x, y, btmColor); } } // bottom for (wc = borderWidth; y < (int)dest.height(); ++y, --wc) { for (x = 0; x < wc; ++x) { dest.setPixelColor(x, y, topColor); } for (; x < (int)dest.width(); ++x) { dest.setPixelColor(x, y, btmColor); } } dest.bitBltImage(&src, borderWidth, borderWidth); }
void BorderFilter::bevel(DImg& src, DImg& dest, const DColor& topColor, const DColor& btmColor, int borderWidth) { int width, height; if (d->settings.orgWidth > d->settings.orgHeight) { height = src.height() + borderWidth * 2; width = (int)(height * d->orgRatio); } else { width = src.width() + borderWidth * 2; height = (int)(width / d->orgRatio); } dest = DImg(width, height, src.sixteenBit(), src.hasAlpha()); dest.fill(topColor); QPolygon btTriangle(3); btTriangle.setPoint(0, width, 0); btTriangle.setPoint(1, 0, height); btTriangle.setPoint(2, width, height); QRegion btRegion(btTriangle); // paint upper right corner QPoint upperRightCorner((width - ((width - src.width()) / 2) - 2), ((0 + (height - src.height())) / 2 + 2) ); for (int x = upperRightCorner.x(); x < width; ++x) { for (int y = 0; y < upperRightCorner.y(); ++y) { if (btRegion.contains(QPoint(x, y))) { dest.setPixelColor(x, y, btmColor); } } } // paint right border for (int x = upperRightCorner.x(); x < width; ++x) { for (int y = upperRightCorner.y(); y < height; ++y) { dest.setPixelColor(x, y, btmColor); } } // paint lower left corner QPoint lowerLeftCorner((0 + ((width - src.width()) / 2) + 2), (height - ((height - src.height()) / 2) - 2) ); for (int x = 0; x < lowerLeftCorner.x(); ++x) { for (int y = lowerLeftCorner.y(); y < height; ++y) { if (btRegion.contains(QPoint(x, y))) { dest.setPixelColor(x, y, btmColor); } } } // paint bottom border for (int x = lowerLeftCorner.x(); x < width; ++x) { for (int y = lowerLeftCorner.y(); y < height; ++y) { dest.setPixelColor(x, y, btmColor); } } if (d->settings.orgWidth > d->settings.orgHeight) { dest.bitBltImage(&src, (dest.width() - src.width()) / 2, borderWidth); } else { dest.bitBltImage(&src, borderWidth, (dest.height() - src.height()) / 2); } }