Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "KOL";
Текущий архив: 2007.05.20;
Скачать: [xml.tar.bz2];

Вниз

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 вся ветка

Форум: "KOL";
Текущий архив: 2007.05.20;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.051 c
2-1178102376
Neket
2007-05-02 14:39
2007.05.20
Колличество строк


9-1150618621
ors_archangel
2006-06-18 12:17
2007.05.20
Сихнронизация компов игры


6-1163506297
Dymytriy
2006-11-14 15:11
2007.05.20
Ограничение траффика в Делфи


15-1177295295
Slider007
2007-04-23 06:28
2007.05.20
С днем рождения ! 22 апреля


4-1166299301
klimov
2006-12-16 23:01
2007.05.20
Достать текс из класса типа Afx:400000:4048:10013:0:0





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский