Add alpha premultiplication.
This commit is contained in:
parent
1676184118
commit
3906222506
@ -4,6 +4,56 @@ namespace Quik.Media.Color
|
||||
{
|
||||
public static class FormatConvert
|
||||
{
|
||||
public static void Premultiply(QImageLock image)
|
||||
{
|
||||
switch (image.Format)
|
||||
{
|
||||
case QImageFormat.RaF:
|
||||
case QImageFormat.RaU8:
|
||||
case QImageFormat.RgbF:
|
||||
case QImageFormat.RgbU8:
|
||||
case QImageFormat.RgbaF:
|
||||
case QImageFormat.RgbaU8:
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
|
||||
int count = image.Width * image.Height * image.Depth;
|
||||
|
||||
if (image.Format.IsFloat())
|
||||
{
|
||||
LockIOF io = new LockIOF(image);
|
||||
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
QColorF color = io[i];
|
||||
|
||||
color.R *= color.A;
|
||||
color.G *= color.A;
|
||||
color.G *= color.A;
|
||||
|
||||
io[i] = color;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LockIO io = new LockIO(image);
|
||||
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
QColor color = io[i];
|
||||
float a = color.A/255.0f;
|
||||
|
||||
color.R = (byte)(color.R * a);
|
||||
color.G = (byte)(color.G * a);
|
||||
color.B = (byte)(color.B * a);
|
||||
|
||||
io[i] = color;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void Convert(QImageLock dst, QImageLock src)
|
||||
{
|
||||
if (dst.Format.IsU8() && src.Format.IsU8())
|
||||
|
Loading…
Reference in New Issue
Block a user