Я опишу свою общую цель на тот случай, если вопрос, который я задал, не в лучшей форме, чтобы получить ответ, который я ищу. У меня есть сфера слов или «шар слов», который вращается вокруг оси X. Когда слова вращаются назад (координата Z изменяется от -1 до 1, от начала до конца), я намереваюсь изменить размер и непрозрачность каждого слова так, чтобы слова "впереди" были на 100% непрозрачными и полноразмерными, а слова сзади более мелкие и несколько прозрачные. Я бы предпочел делать это с помощью прямого кода Delphi и избегать таких вещей, как Direct3D и т. Д. У меня уже есть код вращения, работающий нормально. Мне просто нужно реализовать мою идею перцептивного затенения на основе Z-координаты.
Когда я создаю мяч слов, я динамически создаю компонент TImage для каждого слова. Я «печатаю» слово в растровом изображении TImage, используя метод TCanvas.TextOut () по центру. Я намерен использовать BitBlt, чтобы скопировать это растровое изображение в правильное место на главном холсте, содержащем слово мяч, потому что BitBlt работает быстро и может изменять размер растровых изображений на лету, что соответствует одному из требований для моей операции перцептивного затенения.
Но я не знаю лучшего способа облегчить альфа-смешение. Я знаю, что в Windows есть вызов AlphaBlend (), и его довольно просто использовать. Но мне нужно знать, как создать растровое изображение, которое является копией компонента TImage для каждого слова, имеющего альфа-канал. Обратите внимание: в моем случае все растровое изображение будет иметь одинаковое значение для альфа-канала, поскольку я хочу, чтобы непрозрачность применялась равномерно ко всему слову на основе его координаты Z.
Имеет ли динамически созданный компонент TImage с растровым изображением, созданным с помощью TCanvas.TextOut (), альфа-канал? Если нет, как мне его создать или создать копию растрового изображения TImage в реальном времени, у которого есть альфа-канал, который нужно передать вызову AlphaBlend ()? Если есть лучший способ сделать все это, просто дай мне знать.