การผสมสีเป็นเพียงการแก้ไขเชิงเส้นต่อช่องใช่ไหม? ดังนั้นคณิตศาสตร์จึงค่อนข้างง่าย หากคุณมี RGBA1 มากกว่า RGB2 ผลลัพธ์ของภาพที่มีประสิทธิภาพ RGB3 จะเป็นดังนี้:
r3 = r2 + (r1-r2)*a1
g3 = g2 + (g1-g2)*a1
b3 = b2 + (b1-b2)*a1
…โดยที่ช่องอัลฟาอยู่ระหว่าง 0.0 ถึง 1.0
การตรวจสอบความสมบูรณ์: ถ้าอัลฟาเป็น 0 RGB3 จะเหมือนกับ RGB2 หรือไม่ ใช่. ถ้าอัลฟาคือ 1 RGB3 จะเหมือนกับ RGB1 หรือไม่ ใช่.
หากคุณล็อคเฉพาะสีพื้นหลังและสีสุดท้ายมีสี RGBA จำนวนมาก (ไม่สิ้นสุดในพื้นที่ลอยตัว) ที่สามารถตอบสนองความต้องการได้ ดังนั้นคุณต้องเลือกสีของแท่งหรือระดับความทึบที่คุณต้องการแล้วหาค่าของอีกแท่ง
การเลือกสีตาม Alpha
หากคุณรู้จัก RGB3 (สีสุดท้ายที่ต้องการ), RGB2 (สีพื้นหลัง) และ A1 (ความทึบที่คุณต้องการ) และคุณกำลังมองหา RGB1 เราสามารถจัดเรียงสมการใหม่ได้ดังนี้:
r1 = (r3 - r2 + r2*a1)/a1
g1 = (g3 - g2 + g2*a1)/a1
b1 = (b3 - b2 + b2*a1)/a1
มีการผสมสีบางอย่างที่เป็นไปได้ในทางทฤษฎี แต่เป็นไปไม่ได้สำหรับช่วง RGBA มาตรฐาน ตัวอย่างเช่นหากพื้นหลังเป็นสีดำล้วนสีที่รับรู้ที่ต้องการคือสีขาวบริสุทธิ์และอัลฟ่าที่ต้องการคือ 1% คุณจะต้อง:
r1 = g1 = b1 = 255/0.01 = 25500
…สีขาวสว่างสุด 100 ×สว่างกว่าที่มีอยู่
เลือกอัลฟ่าตามสี
หากคุณรู้จัก RGB3 (สีสุดท้ายที่ต้องการ), RGB2 (สีพื้นหลัง) และ RGB1 (สีที่คุณต้องการเปลี่ยนความทึบ) และคุณกำลังมองหา A1 เราสามารถจัดเรียงใหม่ได้ สมการดังนั้น:
a1 = (r3-r2) / (r1-r2)
a1 = (g3-g2) / (g1-g2)
a1 = (b3-b2) / (b1-b2)
หากค่าเหล่านี้ให้ค่าที่แตกต่างกันคุณจะไม่สามารถทำให้ตรงทั้งหมดได้ แต่คุณสามารถเฉลี่ยอัลฟาเพื่อให้เข้าใกล้มากที่สุด ตัวอย่างเช่นไม่มีความทึบใดในโลกที่จะให้คุณใส่สีเขียวทับสีแดงเพื่อให้ได้สีน้ำเงิน