Вверх ↑
Этот топик читают: Гость
Ответов: 378
Рейтинг: 61
#1: 2011-10-26 10:34:38 ЛС | профиль | цитата
Подскажите как отрисовать PNG с прозрачностью на форме, при условии, что фон формы постоянно сменяется.

code_25568.txt
карма: 0
0
файлы: 1code_25568.txt [6KB] [137]
Ответов: 3889
Рейтинг: 362
#2: 2011-10-26 10:51:45 ЛС | профиль | цитата
kacmem,

Add(MainForm,9011279,364,175)
{
Width=563
Height=447
TransparentColor=0
Position=1
Point(doPicture)
Point(Handle)
Point(onPaint)
link(onCreate,9698916:doEvent1,[(401,195)(401,160)])
link(onPaint,15948709:doDraw,[])
}
Add(BitmapArray,10707396,301,161)
{
Bitmaps=['blue'=[ZIP767E050078DAEDC9210E80301444C17EC13D2A2B4870D50D9EEB20B93A9482E002B879C998DD75DB8F29DDD5AE74733C22E5B1B7F7FF762E01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FCE4029A4E36F5],'green'=[ZIP767E050078DAEDC9A11180301444C17C411FC808349AC1D34E2495479084081AC0ED9B5973775EE55E526F6F72B3C52BD23AF663FEDFA206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F09307B17EE869],'red'=[ZIP767E050078DAEDC9A11180301444C17C411FC808349AC1D34E24AD872444D0006EDFCC9ABBF32AF7927A7B939B2D5E91D6B11FF3FF1651010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000809F3CD6D40764]]
}
Add(Timer,3603566,217,203)
{
Interval=2000
link(onTimer,9720540:doNext,[])
}
Add(CounterEx,9720540,259,203)
{
Max=2
link(onNext,1146455:doRead,[])
}
Add(ArrayRW,1146455,301,203)
{
link(onRead,9011279:doPicture,[])
link(Array,10707396:Array,[])
}
Add(Img_AlphaBmp,15948709,469,196)
{
X=1
Y=1
DrawSource=2
link(AlphaBitmap,13780687:Bitmap,[])
}
Add(AlphaBitmap,13780687,476,147)
{
}
Add(PNG,1859022,434,140)
{
PNG=[ZIP6206000078DAEB0CF073E7E592E2626060E0F5F4700902D22920CCC106240B1E4D0D01529225AE1125C1F96925E58945A90C8E29F949A90A9EB989E9A941A98929958527536D181898153243224A227C7DAC92F373F512416AF42A720B1840C0C6BEA22031393BB5442129353D33CF56E9FDEEFD4A0A9929B64AE1A6BE06BE05CEA919991E5545A9C1557E21C955D9C996294AF6760A361556400372534B12152A7273F28AAD2A6C95C0E65A01D920617D2505B092926C5B2588A3227C03149CF38B52154CF50C74930DCC0C14CC0CF50C8D4DCCCDCD75148C0C0C0DF40D8CF40D8D740DCDAD8C8DAC0C0C14A04009685B514A9A55908B1BD42E20CF5629A3A4A4C04A5FBFBCBC5CAFDC582FBF285DDFD0D2D212648691912E50856E71655E4962856E5EB132CC0497D4E2E4A2CC8292CCFC3C05103F3129BFB4C4564909E685DC02B8B179C5D0600206987E456281BEA19E813E92425F5FFC4A7373E1AA8B4B8252D3F0AB2E0EA92C48D50F4A2DCE2F2D4A06465C9A324873819573516A62497E51487E7E0E2C140332F24BF28B33F20B149C834D15C233F352F2CB8BC1AA7D7DAD3CF38A4B12F392533D5D6C9580227A99992956A68606AE2E4EC6666E6E968E8686AE0616264E40E0E26C6AEAE8EC6A606A02D3EB929F5C9A9B9A5702D39B82D06B8E532F28214074A7166596A5A6B815E5E72A803D6C9589DB2D26B8DD02D19B82DB2DA638F5EA031DA38F16CD302160DA0131E18916C88127FBD43C605A2F0226EA74F6BF931918986E78BA388654DC7A33E77FEE23039186874798221BA515650FCA364A03E91E06E5031C67394E72181C327492683C364939F2DAE6BF87FA2739DF57FFC91F75DCEFEFD1F7B6EEB9CFAFBF2E65BBFC50DCBB41C081C389419183B1458145A009C85160516C106861701260E270E4808AC11540C4E00A1A057EA75F5C792DF8669EA3F7C297F1DFDEBED877FDCBDA1D8967564B3F5E7BED77A8F593D39E1B67ECCB35FEEBFBE475598FAAE2EBBA6933CFDBB93A75A4B64EF87D93753EBFB2D81F9D3793B6277E5C54699E97F8F6F2FD6F6FA7BC88E6FAB4ADD1C0FA5CEB92BAEA207967F51ED1BEFD55D3BFD6859EE012DFE2F5866F3F937459D06A9F5F897AAB6242CDCFDCDE797E6AC0CB9FDFAF577CFF2C1A52A9FDB0D126ED974F5E7B466B4E73DDEF1332739D8E190659F1AFF5B993FC5CCCB42C77E98C64DBA7B28B8EBA08FDF28CF81052946F747F7FCAA78887B63C1BD9D5CD8FC7052FD27FC761691F28D56E9F20CD19E95C64EF7A284E534454DD3F65214F65B3C5CB5997AA33CE4DB4CB36FF7ED8F9DA8D32EF1351E9878216DB6CF5FE1EAF21BFABE0DFA5C997396BBF352ED8E0FFD9BE5D47F8A6ECC6F31B837FAB7E5A76A067CFFCE6EDCC6F67942E99F39D7B4255CE47C354C54B8D172A7CABB3D6B36A1E7BBBA1DE795368C1499980ADB5F39452E665CC563F31A352F5F5856D5DCE4F3678CC9F78347297C1658DC3376EEFB33A19784F31282A42DACE6E8F394B50458CF2134B7D1E5FA52737CA33F6FFFEE6CEA1CFE139657762D13DD7438FE3974E703AA16D9D18D7A251EE2EFD325A7B9D7EECA77BBB631362E64F15B816772EA9C9A94720EB968B44567376DBE17B27A5D707B42C61B676E1D375DB699D3633F8F70CA6C476815AA7739C2B8D1FE7C46437BBD49509D9C987ACB26FB1FCFFBB36EA43B60322FD40D20A3CFD40D20A7202037290131890E370E2C84FB10486EA437B9CD2B8DB1D41A5BEA7AB9FCB3AA7842600507052D7]
Transparent=0
Point(onAlphaBitmap)
Point(doLoadFromStream)
Point(doAlphaBitmap)
link(onAlphaBitmap,13780687:doLoad,[])
}
Add(Hub,9698916,406,154)
{
link(onEvent1,1859022:doLoadFromStream,[])
link(onEvent2,1859022:doAlphaBitmap,[])
}


------------ Дoбавленo в 10.51:
Добавил загрузку из PNG, перекачайте схему выше.
карма: 1

1
Голосовали:kacmem
Ответов: 378
Рейтинг: 61
#3: 2011-10-26 10:53:06 ЛС | профиль | цитата
М-м-м, 1nd1g0, немного не то. Необходимо именно PNG без сторонних конвертаций и без хранения в памяти. Тем более итог получился инвертированный.
карма: 0
0
Ответов: 3889
Рейтинг: 362
#4: 2011-10-26 10:53:51 ЛС | профиль | цитата
kacmem, я догадывался, что не случайно именно этот формат выбирали и, возможно, будете динамически загружать, потому поправил схему, перекачайте
1nd1g0 писал(а):
Добавил загрузку из PNG, перекачайте схему выше.

карма: 1

0
Ответов: 378
Рейтинг: 61
#5: 2011-10-26 10:54:10 ЛС | профиль | цитата
Да, то что нужно, спасибо!
карма: 0
0
Разработчик
Ответов: 26324
Рейтинг: 2148
#6: 2011-10-26 11:01:54 ЛС | профиль | цитата
1nd1g0, вот этот элемент лишний



Add(AlphaBitmap,13780687,490,168)
{
}

карма: 22

0
Ответов: 3889
Рейтинг: 362
#7: 2011-10-26 11:03:16 ЛС | профиль | цитата
nesco писал(а):
вот этот элемент лишний

Да, ты прав, но я схему делал ДО того, как ТС сказал, что хранение не нужно. Сперва там картинка и лежала.
карма: 1

0
Ответов: 378
Рейтинг: 61
#8: 2011-10-26 11:07:07 ЛС | профиль | цитата
nesco писал(а):
вот этот элемент лишний
А как без него?
------------ Дoбавленo в 11.07:
Всё, понял, поспешил с вопросом.
карма: 0
0
Ответов: 3889
Рейтинг: 362
#9: 2011-10-26 11:21:06 ЛС | профиль | цитата
kacmem, Кстати, вариант с "лишним" элементом имеет право на существование т.к. память AlphaBitmap всё равно можно чистить (doClear), и не всегда нужно постоянно с потока (диска) перерисовывать при каждом изменении фона новое изображение. А при загрузке одного и того же, файловая система всё равно займёт память под него (закэширует), или, ещё хуже, постоянно будет читать с диска (без кэширования).
карма: 1

0
Ответов: 378
Рейтинг: 61
#10: 2011-10-26 11:44:34 ЛС | профиль | цитата
[offtop]
1nd1g0 писал(а):
не всегда нужно постоянно с потока (диска) перерисовывать при каждом изменении фона новое изображение. А при загрузке одного и того же, файловая система всё равно займёт память под него (закэширует), или, ещё хуже, постоянно будет читать с диска (без кэширования)
1nd1g0, я чувствую, что при разрастании схемы у меня возникнет еще масса вопросов Спасибо за помощь [/offtop]
------------ Дoбавленo в 11.44:
Вот и вопрос Как получить событие при наведении/покидании/клике мышкой по элементу с PNG в схеме 1nd1g0
карма: 0
0
Ответов: 16884
Рейтинг: 1239
#11: 2011-10-26 12:08:53 ЛС | профиль | цитата
1nd1g0 писал(а):
или, ещё хуже, постоянно будет читать с диска (без кэширования).
Почему "ещё хуже" ?
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 3889
Рейтинг: 362
#12: 2011-10-26 12:21:33 ЛС | профиль | цитата
kacmem писал(а):
Как получить событие при наведении/покидании/клике мышкой по элементу

Просто - никак, отслеживать мышь над элементом, на котором производится рисование (в моём примере это - вся форма), и попадание в прямоугольник, где мы рисовали, например, этим:
Add(PointInRect,3531182,378,413)
{
}
карма: 1

0
Ответов: 378
Рейтинг: 61
#13: 2011-10-26 14:34:06 ЛС | профиль | цитата
1nd1g0 писал(а):
отслеживать мышь над элементом
Мысль понял, реализовал, но с помощью стороннего компонента с форума MouseHook. А стандартными никак?
карма: 0
0
Ответов: 2478
Рейтинг: 698
#14: 2011-10-26 14:42:24 ЛС | профиль | цитата
kacmem, пример посмотри http://forum.hiasm.com//getfile/25573 (заменить в схеме путь к иконкам в Memory) из соседней темы http://forum.hiasm.com/forum.html?q=3&t=58266 там отрисовываются иконки.
карма: 11

0
14
Сообщение
...
Прикрепленные файлы
(файлы не залиты)