25 июля 2008

Microsoft's APIs: features, not bugs

У Microsoft если что-то работает не так, как ожидалось - это не баги, а фичи. Они документируются и их не чинят.

Мне (и другим тоже) почему-то казалось, что функция AplhaBlend() должна брать обычное сырое (raw) RGBA изображение и рисовать его с учетом прозрачности. И я долго не мог понять, почему точки с A=0 и с A=255 рисуются нормально, а все остальное - неправильно (получается очень белое).

Оказывается, нужно заранее самостоятельно наложить альфа-канал на картинку, типа такого:
bgra_pixel *It(Bits);
for (int Left = Width * Height; Left; --Left, ++It)
{
It->blue = ((unsigned)It->blue * It->alpha) >> 8;
It->green = ((unsigned)It->green * It->alpha) >> 8;
It->red = ((unsigned)It->red * It->alpha) >> 8;
}

1 комментарий:

Анонимный комментирует...

Eto ne bug - eto standard, nazivaetsia: premultiplied alpha
Ispolzuetsia v bolshinstve sistem s alpha composition (v tom cisle v OS, takih kak Windows, Mac OSX)...
Da MS dalek do sovershenstva no tam gde greha net pridumivat' ego vseje nenujno...