mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-06-25 03:46:18 +00:00
Change Background Image for games (#2334)
* Added opacity change instead of blur for background image * Fixed integer overflow when refreshing grid list * Added slider to control background image opacity * Added show background image button * Added UI code for checkbox and English and Spanish translations for new UI elements * Removed background image caching * Background image update on apply/save * Only recompute image if opacity or game changes * Fixed segfault when trying to change opacity after table refresh * Placed background image settings under GUI in settings file
This commit is contained in:
parent
363604c6f0
commit
b6ad512e34
13 changed files with 279 additions and 56 deletions
|
@ -201,4 +201,30 @@ public:
|
|||
|
||||
return result;
|
||||
}
|
||||
|
||||
// Opacity is a float between 0 and 1
|
||||
static QImage ChangeImageOpacity(const QImage& image, const QRect& rect, float opacity) {
|
||||
// Convert to ARGB32 format to ensure alpha channel support
|
||||
QImage result = image.convertToFormat(QImage::Format_ARGB32);
|
||||
|
||||
// Ensure opacity is between 0 and 1
|
||||
opacity = std::clamp(opacity, 0.0f, 1.0f);
|
||||
|
||||
// Convert opacity to integer alpha value (0-255)
|
||||
int alpha = static_cast<int>(opacity * 255);
|
||||
|
||||
// Process only the specified rectangle area
|
||||
for (int y = rect.top(); y <= rect.bottom(); ++y) {
|
||||
QRgb* line = reinterpret_cast<QRgb*>(result.scanLine(y));
|
||||
for (int x = rect.left(); x <= rect.right(); ++x) {
|
||||
// Get current pixel
|
||||
QRgb pixel = line[x];
|
||||
// Keep RGB values, but modify alpha while preserving relative transparency
|
||||
int newAlpha = (qAlpha(pixel) * alpha) / 255;
|
||||
line[x] = qRgba(qRed(pixel), qGreen(pixel), qBlue(pixel), newAlpha);
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue