Альфа-смешение цветов в .NET Compact Framework 2.0

В среде Full .NET вы можете использовать метод Color.FromArgb () для создания нового цвета с альфа-смешиванием, например:

Color blended = Color.FromArgb(alpha, color);

или

Color blended = Color.FromArgb(alpha, red, green , blue);

Однако в Compact Framework (в частности, 2.0) ни один из этих методов не доступен, вы получаете только:

Color.FromArgb(int red, int green, int blue);

и

Color.FromArgb(int val);

Первый, очевидно, даже не позволяет вводить альфа-значение, но документация для последнего показывает, что «val» является 32-битным ARGB-значением (как 0xAARRGGBB, в отличие от стандартного 24-битного 0xRRGGBB), поэтому имеет смысл что вы можете просто построить значение ARGB и передать его функции. Я попробовал это со следующим:

private Color FromARGB(byte alpha, byte red, byte green, byte blue)
{
    int val = (alpha << 24) | (red << 16) | (green << 8) | blue;
    return Color.FromArgb(val);
}

Но независимо от того, что я делаю, альфа-смешение никогда не работает, результирующий цвет всегда с полной непрозрачностью, даже при установке значения альфа на 0.

Кто-нибудь получил это для работы на Compact Framework?

18.08.2008 12:17:16
5 ОТВЕТОВ
РЕШЕНИЕ

Очевидно, это не так просто, но все же возможно , если у вас Windows Mobile 5.0 или новее.

1
18.08.2008 12:33:02

Очевидно, это не так просто, но все же возможно, если у вас Windows Mobile 5.0 или новее.

Ничего себе ... определенно не стоит, если я должен поместить весь этот код (и сделать нативное взаимодействие!). Хорошо бы знать, хотя, спасибо за ссылку.

0
18.08.2008 12:37:45

Существует сайт Codeplex , который, кажется, делает тяжелую работу по взаимодействию для вас:

1
13.10.2008 23:03:20

я беру этот код и добавляю

device.RenderState.AlphaBlendEnable = true;
device.RenderState.AlphaFunction = Compare.Greater;
device.RenderState.AlphaTestEnable = true;
device.RenderState.DestinationBlend = Blend.InvSourceAlpha;
device.RenderState.SourceBlend = Blend.SourceAlpha;
device.RenderState.DiffuseMaterialSource = ColorSource.Material;

в инициализированной рутине, и это работает очень хорошо, спасибо

0
26.12.2011 18:09:37

CE 6.0 не поддерживает альфа-смешение. WM 5.0 и выше делают, но не через .NET CF, вам потребуется P / Invoke GDI для этого. Есть готовые решения, однако, если вам интересно, я могу найти ссылки завтра в офисе. Я должен работать с CE 6.0 в настоящее время, поэтому я не думаю о них.

Если вы используете CE 6.0, вы можете использовать псевдопрозрачность, сохранив цвет фона прозрачности (например, ff00ff или что-то похожее некрасивое) и используя его в своих изображениях для прозрачных областей. Затем ваши родительские элементы управления должны реализовать простой интерфейс, который позволяет перерисовывать соответствующую часть в графическом буфере дочерних элементов управления. Обратите внимание, что это не даст вам настоящий «альфа-канал», а скорее просто жесткую бинарную прозрачность.

Это не так плохо, как кажется. Взгляните на OpenNETCF ImageButton для начинающих. Если вы собираетесь использовать этот метод, у меня есть несколько расширенная версия некоторых простых элементов управления с этой техникой, если вам интересно.

Еще одним недостатком является то, что этот метод опирается на родительский элемент управления, реализующий специальный интерфейс, а дочерний элемент управления использует его на чертеже. Таким образом, с компонентами с закрытым исходным кодом (то есть также со стандартными компонентами winforms) вам не повезло.

0
18.06.2012 22:03:05
CE 6.0 делает поддержку альфа - смешивание. Может быть, что ваша конкретная сборка ОС не, но поддержка находится в ОС и может быть включена в образ ОС.
ctacke 19.06.2012 02:35:13