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