Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Звук, графика и видео > прозрачность (psd или любой другой)


Автор: gonzales 24.12.2007, 13:15
подскажите, как достать маску прозрачности, сохраненную например в psd-формате (или png, хотя я не понял в упор, как она там сохраняется, при сохранении png в фотошопе альфаканал пропадает).

необходимо это для отображения правильной тени от объекта. как прописовать саму тень ясно.
вариант с загрузкой маски из отдельного файла не предлагать.
пробую загружать psd с помощью библиотек GraphicEx.
А вот как извлечь альфаканал в упор не могу понять


Автор: Alexeis 24.12.2007, 20:18
gonzales, если использовать PNGImage, то у него есть свойство AlphaScanLine, которое дает доступ к альфа-каналу на подобии обычного ScanLine. Очевидно, что альфа-канал храниться отдельно у него.

Автор: gonzales 24.12.2007, 22:01
а PNGImage поддерживает другие форматы кроме png?
в принципе обычный 32-битный bmp-файл корректно обрабатывается обычным AlphaBlend, но и из него я не смог извлечь альфаканал.

Автор: Alexeis 24.12.2007, 22:59
Цитата(gonzales @  24.12.2007,  22:01 Найти цитируемый пост)
а PNGImage поддерживает другие форматы кроме png?

  Неа.
Цитата(gonzales @  24.12.2007,  22:01 Найти цитируемый пост)
обычный 32-битный bmp-файл корректно обрабатывается обычным AlphaBlend, но и из него я не смог извлечь альфаканал.

  У него альфа-канал в каждом пикселе, не помню то ли в 1м то ли в последнем байте двойного слова.

Автор: gonzales 25.12.2007, 10:16
спасибо. 
а вот такой конструкцией нельзя его выцепить?
Код

type
  TRGBA = packed record
           case Byte of
           0: (B, G, R, A : Byte);
           1: (Acolor : Cardinal);
  end;

  T32bitarr = array[0..32000] of TRGBA;
  P32bitarr = ^T32bitarr;


 for j := 0 to bmp2.Height - 1   
  do
    begin
      Line := bmp2.ScanLine[j];
      for i := 0 to bmp2.Width - 1
      do
          Line[i].A //---- вот это не дает картинку альфаканала?
    end;

Автор: Alexeis 25.12.2007, 11:26
Цитата(gonzales @  25.12.2007,  10:16 Найти цитируемый пост)
а вот такой конструкцией нельзя его выцепить?

  Думаю просто битмапка неправильная. Приатачиваю битмапку где пример указанный пример работает.

Автор: gonzales 25.12.2007, 11:59
Цитата

Думаю просто битмапка неправильная


нет, битмэпка правильная. У меня ощущение, что я не правильно сканлайн организовываю.
Ведь есть разница между pf32bit и pf8bit?

Добавлено через 13 минут и 46 секунд
и еще один вопрос, в архиве лежит проект, практически идентичный вот этому http://forum.vingrad.ru/topic-54390.html при джина из бутылки. Но выходит какая-то лажа. Не пойму почему

Автор: Alexeis 25.12.2007, 12:38
Цитата(gonzales @  25.12.2007,  11:59 Найти цитируемый пост)
У меня ощущение, что я не правильно сканлайн организовываю.
Ведь есть разница между pf32bit и pf8bit?

  А у меня не ощущение, а факты. Я проверял твой код и получил в Line[i]. A правильное значение альфы. У меня альфа больше нуля начинается с 7 строки, так примерно и есть на моей картинке. Альфа почти сразу переходит к уровню полной непрозрачности (255), так и есть на рисунке. У меня полное соответствие. Формат я указывал pf32bit . Байты и идут в порядке BGRA. 

Автор: gonzales 25.12.2007, 12:59
спасибо, буду копаться

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)