Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.05.20;
Скачать: CL | DM;

Вниз

KolPng   Найти похожие ветки 

 
Redline   (2006-09-29 18:48) [0]

Здравствуйте. Использую TPngObject. Открываю через него файл и рисую на PaintBox. Но не знаю как сделать его прозрачным!


 
Vladimir Kladov   (2006-09-29 19:11) [1]

У него же есть DrawTransparent. Или вы в исходник не заглядывали?


 
Redline   (2006-09-29 19:25) [2]

Это не то. Мне нужна полупрозрачность, так чтобы и картинку было видно и то что за ней. А за ней находится другой paintbox.


 
Vladimir Kladov   (2006-09-29 19:30) [3]

А при чем тут png. Вам тогда надо или SetLayer... или отдельную форму с Alpha задействовать.


 
Redline   (2006-09-29 19:43) [4]

Просто переделываю прогу из vcl. Там я сделал так: взял 2 timage, наложил друг на друга, загрузил png файлы, и все получилось красиво. Попытался  сделать также в kol, из под одного объекта другого не видно. Вот и ищу решение.


 
[e]Bu$ter ©   (2006-10-01 12:10) [5]

Извините, что немного не в тему, но вопрос кажется похожий.

Если через DC рисовать на форме с помощью DrawTransparent полупрозрачной картинкой (по краям, она как бы растворяется) при transperent:true у формы, всё смазывается, а при выключеном - прозрачность рисуется нормально, но естествено видно форму.
Т.е. как только появляется окно и происходит первая перерисовка, то всё вроде бы нормально, но когда начинаешь двигать форму по экрану - всё смазывается.

Может кто-то видел? Подскажите пожалуйста где копать?


 
ANTPro ©   (2006-10-01 15:24) [6]

[e]Bu$ter ©   (01.10.06 12:10) [5]
Может быть это:
http://delphimaster.net/view/11-1158934714/


 
[e]Bu$ter ©   (2006-10-02 11:37) [7]


> Может быть это:
> http://delphimaster.net/view/11-1158934714/

Кажется это не то. Вопрос в другом.
В моём случае, совершенно не обязательно делать окно под размер и форму изображения (тем более, что возможна ситауция, когда края изображения ярко не выражены и форма всё-равно будет больше "нормально" видимой части картинки).

Тут, всего-лишь нужно побороть один глюк: кривую перерисовку формы при её движении по экрану или при движении контролов по ней.

Вот два скрина:
После того как появилась форма: http://ebuster.fatal.ru/form_befor_drag.jpg
После того как её подвигали по экрану: http://ebuster.fatal.ru/form_after_drag.jpg
На втором, видно то безобразие которое хочется побороть.

Как я рисую, уже описано выше. Напомню лишь, что если transperent у формы вылкючить (сделать false) то прозрачность у изображения рисуется нормально.

Вот я и думаю, кто виноват в проиллюстрированном глюке: форма (KOL), KolPng, или я?


 
Barloggg   (2006-10-02 12:31) [8]

ты.

сделай проще. как в Директ3Д или ДиректДрав.

а именно, заведи итоговую картинку.
и уже ее быстро отрисовывай на всю форму при каждой перерисовке формы.

второе.
где у тебя перерисовка?
в onPaint? если нет, тогда не очень хорошо.

такая фигня начинается когда в onPaint нету заливки заднего фона да и отрисовки вообще.


 
[e]Bu$ter ©   (2006-10-02 12:46) [9]


> сделай проще. как в Директ3Д или ДиректДрав.

Разьве так будет проще? Я не сталкивался до этого ни с Директ3Д ни с ДиректДрав. Думаешь пора?


> где у тебя перерисовка?
> в onPaint? если нет, тогда не очень хорошо.

Отрисовка идёт именно в onPaint. Вот так:

procedure TefsForm.KOLForm1Paint(Sender: PControl; DC: HDC);
begin
 kolpng.DrawTransparent(DC, 0, 0, kolpng.TransparentColor);
end;



> такая фигня начинается когда в onPaint нету заливки заднего фона

Вот! Может в этом проблема? Как организвать заливку заднего фона?

P.S. В разрабатываемой программе очень критична скорость запуска. И хоть я не знаю пока как там работает Direct(Draw\3D), но мне кажется инициалзиация всего этого будет идти дольше чем при использовании KolPng. М?


 
Sapersky   (2006-10-02 19:51) [10]

> сделай проще. как в Директ3Д или ДиректДрав.
Разьве так будет проще?


Это в том смысле, что выполнять блендинг лучше не на уровне окон/компонентов, а  вручную, битмап1 + битмап2, и потом выводить результат обычным BitBlt/Draw.
Сам по себе алгоритм несложен, есть множество реализаций, правда, для KOL.TBitmap я не видел ни одной. Для VCL.TBitmap должна быть здесь:
http://kladovka.net.ru/download.cgi?id=252
Также есть в составе SpriteUtils:
http://www.miek.narod.ru/spriteutils2.zip

Но вообще самое простое и быстрое - заранее наложить эти две картинки друг на друга в фотошопе :)

Кстати, хочу тоже пожаловаться на KOLPng:
1) Зачем грузить альфа-канал в какую-то отдельную область памяти, если он прекрасно умещается в 4-й байт 32-битного цвета.
2) Загрузка из файла (декодирование) - медленно! IrfanView грузит png раза в 2 быстрее. Основной (хотя, возможно, и не единственный) тормоз - т.н. фильтры, особенно PAETH. Попробовал оптимизировать - выжал процентов 15. Всё равно медленно...
В процессе расковыривания кода фильтров выяснилось, что в KOL.pas зачем-то реализована функция Abs. Допустим, что это очень качественная сверхоптимизированная реализация - но стандартная Abs инлайнится и потому заведомо быстрее.


 
alex3   (2006-10-02 20:14) [11]

>1) Зачем грузить альфа-канал в какую-то отдельную область памяти
1)Так устроен формат Png.
2)Для возможности манипуляций с альфа-каналом, к примеру, изменять
прозрачность отдельных  участков. Возможно так же массштабирование.


 
Vladimir Kladov   (2006-10-02 21:53) [12]

{$IFDEF REDEFINE_ABS}
  function Abs( X: Integer ): Integer;
  {* absolute value }
{$ENDIF}


т.е. только если вам самим это зачем-то нужно, и вы объявили REDEFINE_ABS.

Медленно? Сделайте быстрее, положите свой вариант. Еще есть Gdi+, KOLGraphics.


 
Sapersky   (2006-10-03 13:57) [13]

т.е. только если вам самим это зачем-то нужно, и вы объявили REDEFINE_ABS.

О, пардон. Использую старую версию KOL, когда новую смотрел - REDEFINE_ABS не заметил.

2)Для возможности манипуляций с альфа-каналом, к примеру, изменять
прозрачность отдельных  участков. Возможно так же массштабирование.


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

Ну ладно, я понял - "вам это надо, вы и переделывайте" :)


 
alex3   (2006-10-03 21:56) [14]

PNG формат- портативная сетевая графика, был разработан для сетевого применения, основная фича состоит в методе появления изображения на
странице, при загрузке изображения. Его преимущество состоит в том, что
вы можете увидеть содержание картинки, в грубом виде, еще до полной загрузки. Вот по этому он состоит из так называемых кусков. Если кому интересно, можете прочитать в хелпе на сайте разработчиков PNG.  
Я применял масштабирование PNG для небольшой анимации.
Вообще был бы интересен графический формат с анимацией и альфа каналом! Аля GIF & PNG.



Страницы: 1 вся ветка

Текущий архив: 2007.05.20;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.04 c
1-1174826542
Midnighter
2007-03-25 16:42
2007.05.20
Получить указатель на объект из интерфейса


2-1178266462
SerMaxx
2007-05-04 12:14
2007.05.20
Как работать с графиками


15-1177077151
Real
2007-04-20 17:52
2007.05.20
Глюк формума


2-1178366375
Ламер 2.Х
2007-05-05 15:59
2007.05.20
Перезагрузка


15-1176883038
beginer_
2007-04-18 11:57
2007.05.20
PHP: не загружаются MP3-файлы на сервер