Прозрачность для отправки текстовых сообщений в GDI

Я не протестировал его, но это должно работать

<script type="text/javascript">
var selected = new Array();

$(document).ready(function() {

  $("input:checkbox[name=type]:checked").each(function() {
       selected.push($(this).val());
  });

});

</script>
8
задан VideoDev 27 August 2009 в 10:47
поделиться

1 ответ

Если вы хотите рисовать текст без заливки фона, SetBkMode (hdc, TRANSPARENT) укажет GDI оставить фон при рисовании текста.


Для фактического рендеринга цвет переднего плана текста с альфа-каналом ... будет более сложным. GDI не так широко поддерживает альфа-каналы в своих API. За пределами AlphaBlend на самом деле все, что он делает, это сохраняет канал. На самом деле недопустимо устанавливать верхние биты COLOREF в альфа-значения, поскольку старший байт фактически используется для флагов, чтобы указать, является ли COLOREF (а не значением RGB) записью палитры.

Так что, к сожалению, ваш единственный реальный путь вперед:

  1. Создайте 32-битный DIBSection. ( CreateDIBSection ). Это дает вам HBITMAP, который гарантированно может содержать альфа-информацию. Если вы создаете растровое изображение с помощью одной из других функций создания растрового изображения, оно будет на глубине цвета устройства, которая может быть не 32bpp.
  2. DrawText на DIBSection.
  3. Когда вы создали DIBSection, вы получили указатель на фактический объем памяти. На этом этапе вам нужно просмотреть память и установить альфа-значения. Я не думаю, что DrawText вообще что-нибудь сделает с альфа-каналом. Я думаю о простой проверке компонентов RGB каждого DWORD растрового изображения - если это основной цвет, перепишите DWORD с 50% (или любым другим) альфа в альфа-байте, если это цвет фона, перезапишите со 100% альфа в байте альфа. *
  4. AlphaBlend растровое изображение в конечный пункт назначения. AlphaBlend требует предварительного умножения альфа-канала в источнике.

*

  • Нарисовать текст в DIBSection.
  • Когда вы создали DIBSection, вы получили указатель на фактическую память. На этом этапе вам нужно просмотреть память и установить альфа-значения. Я не думаю, что DrawText вообще что-нибудь сделает с альфа-каналом. Я думаю о простой проверке компонентов RGB каждого DWORD растрового изображения - если это основной цвет, перепишите DWORD с 50% (или любым другим) альфа в альфа-байте, если это цвет фона, перезапишите со 100% альфа в байте альфа. *
  • AlphaBlend растровое изображение в конечный пункт назначения. AlphaBlend требует предварительного умножения альфа-канала в источнике.
  • *

  • Нарисовать текст в DIBSection.
  • Когда вы создали DIBSection, вы получили указатель на фактическую память. На этом этапе вам нужно просмотреть память и установить альфа-значения. Я не думаю, что DrawText вообще что-нибудь сделает с альфа-каналом. Я думаю о простой проверке компонентов RGB каждого DWORD растрового изображения - если это основной цвет, перепишите DWORD с 50% (или любым другим) альфа в альфа-байте, если это цвет фона, перезапишите со 100% альфа в байте альфа. *
  • AlphaBlend растровое изображение в конечный пункт назначения. AlphaBlend требует предварительного умножения альфа-канала в источнике.
  • * На этом этапе вам нужно просмотреть память и установить альфа-значения. Я не думаю, что DrawText вообще что-нибудь сделает с альфа-каналом. Я думаю о простой проверке компонентов RGB каждого DWORD растрового изображения - если это основной цвет, перепишите DWORD с 50% (или любым другим) альфа в альфа-байте, если это цвет фона, перезапишите со 100% альфа в байте альфа. *

  • AlphaBlend растровое изображение в конечный пункт назначения. AlphaBlend требует предварительного умножения альфа-канала в источнике.
  • * На этом этапе вам нужно просмотреть память и установить альфа-значения. Я не думаю, что DrawText вообще что-нибудь сделает с альфа-каналом. Я думаю о простой проверке компонентов RGB каждого DWORD растрового изображения - если это основной цвет, перепишите DWORD с 50% (или любым другим) альфа в альфа-байте, если это цвет фона, перезапишите со 100% альфа в байте альфа. *

  • AlphaBlend растровое изображение в конечный пункт назначения. AlphaBlend требует предварительного умножения альфа-канала в источнике.
  • * перепишите DWORD с альфа-значением 50% (или любым другим) в альфа-байте, если это цвет фона, перезапишите со 100% -ным альфа-значением в альфа-байте. *

  • AlphaBlend растровое изображение в конечный пункт назначения. AlphaBlend требует, чтобы альфа-канал в источнике был предварительно умножен.
  • * перепишите DWORD с альфа-значением 50% (или любым другим) в альфа-байте, если это цвет фона, перезапишите со 100% -ным альфа-значением в альфа-байте. *

  • AlphaBlend растровое изображение в конечный пункт назначения. AlphaBlend требует предварительного умножения альфа-канала в источнике.
  • * Может быть достаточно просто запомнить DIBSection с 50% альфа перед выполнением DrawText и убедиться, что BKColor черный. Я не знаю, что DrawText может сделать с альфа-каналом. Требуются некоторые эксперименты.

    13
    ответ дан 5 December 2019 в 07:59
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: