CoCalc provides the best real-time collaborative environment for Jupyter Notebooks, LaTeX documents, and SageMath, scalable from individual users to large groups and classes!
CoCalc provides the best real-time collaborative environment for Jupyter Notebooks, LaTeX documents, and SageMath, scalable from individual users to large groups and classes!
Path: blob/master/Common/Data/Color/RGBAUtil.cpp
Views: 1401
#include "Common/Data/Color/RGBAUtil.h"12template <typename T>3static T clamp(T f, T low, T high) {4if (f < low)5return low;6if (f > high)7return high;8return f;9}1011uint32_t whiteAlpha(float alpha) {12if (alpha < 0.0f) alpha = 0.0f;13if (alpha > 1.0f) alpha = 1.0f;14uint32_t color = (int)(alpha*255) << 24;15color |= 0xFFFFFF;16return color;17}1819uint32_t blackAlpha(float alpha) {20if (alpha < 0.0f) alpha = 0.0f;21if (alpha > 1.0f) alpha = 1.0f;22return (int)(alpha*255)<<24;23}2425uint32_t colorAlpha(uint32_t rgb, float alpha) {26if (alpha < 0.0f) alpha = 0.0f;27if (alpha > 1.0f) alpha = 1.0f;28return ((int)(alpha*255)<<24) | (rgb & 0xFFFFFF);29}3031uint32_t colorBlend(uint32_t rgb1, uint32_t rgb2, float alpha) {32float invAlpha = (1.0f - alpha);33int r = (int)(((rgb1 >> 0) & 0xFF) * alpha + ((rgb2 >> 0) & 0xFF) * invAlpha);34int g = (int)(((rgb1 >> 8) & 0xFF) * alpha + ((rgb2 >> 8) & 0xFF) * invAlpha);35int b = (int)(((rgb1 >> 16) & 0xFF) * alpha + ((rgb2 >> 16) & 0xFF) * invAlpha);36int a = (int)(((rgb1 >> 24) & 0xFF) * alpha + ((rgb2 >> 24) & 0xFF) * invAlpha);3738uint32_t c = clamp(a, 0, 255) << 24;39c |= clamp(b, 0, 255) << 16;40c |= clamp(g, 0, 255) << 8;41c |= clamp(r, 0, 255);42return c;43}4445uint32_t alphaMul(uint32_t color, float alphaMul) {46uint32_t rgb = color & 0xFFFFFF;47int32_t alpha = color >> 24;48alpha = (int32_t)(alpha * alphaMul);49if (alpha < 0) alpha = 0;50if (alpha > 255) alpha = 255;51return (alpha << 24) | (rgb & 0xFFFFFF);52}5354uint32_t rgba(float r, float g, float b, float alpha) {55uint32_t color = (int)(alpha*255)<<24;56color |= (int)(b*255)<<16;57color |= (int)(g*255)<<8;58color |= (int)(r*255);59return color;60}6162uint32_t rgba_clamp(float r, float g, float b, float a) {63return rgba(clamp(r, 0.0f, 1.0f), clamp(g, 0.0f, 1.0f), clamp(b, 0.0f, 1.0f), clamp(a, 0.0f, 1.0f));64}656667