|
Почему происходит искажение глифа при вставке в канву?
|
|||
---|---|---|---|
#18+
Вот глиф до вставки и после. Разница очевидна. Что я делаю не так? Код: pascal 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2016, 11:32 |
|
Почему происходит искажение глифа при вставке в канву?
|
|||
---|---|---|---|
#18+
Че-то фигня какая-то с прикладыванием картинки творится, выбирается файл, а в тему не вставляется. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2016, 11:45 |
|
Почему происходит искажение глифа при вставке в канву?
|
|||
---|---|---|---|
#18+
Пытливый, У тебя там скорее всего png с прозрачным краем и в bmp он преобразуется очень криво. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2016, 13:05 |
|
Почему происходит искажение глифа при вставке в канву?
|
|||
---|---|---|---|
#18+
Попробуйте заменить вывод значка из ImageList на канву функцией ImageList_DrawEx из CommCtrl (гораздо более быстрый способ): Код: pascal 1. 2.
P.S. Из моего общего опыта, у меня периодически возникали подобные казусы при работе с cxImegeList разных версий. При возможности (почти всегда) я использую либо стандартный ImageList, либо TPngImageList из дополнительной библиотеки PngComponents (работаю в D2007). ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2016, 13:30 |
|
Почему происходит искажение глифа при вставке в канву?
|
|||
---|---|---|---|
#18+
Сергей NПопробуйте заменить вывод значка из ImageList на канву функцией ImageList_DrawEx из CommCtrl (гораздо более быстрый способ): Код: pascal 1. 2.
P.S. Из моего общего опыта, у меня периодически возникали подобные казусы при работе с cxImegeList разных версий. При возможности (почти всегда) я использую либо стандартный ImageList, либо TPngImageList из дополнительной библиотеки PngComponents (работаю в D2007). А у меня наоборот, при использовании cxImageList проблем с прозрачностью нет, а вот ImageList по-простому не выведешь ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2016, 14:29 |
|
Почему происходит искажение глифа при вставке в канву?
|
|||
---|---|---|---|
#18+
Меланхолично... А ведь битмапы с альфа-каналом существуют хрен знает с какой древности. Вот чего стоило встроить их поддержку в генофонд, всего то одну функцию при отрисовке заменить и подправить конвертацию из других graphic-ов. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2016, 14:36 |
|
Почему происходит искажение глифа при вставке в канву?
|
|||
---|---|---|---|
#18+
Соколинский БорисМеланхолично... А ведь битмапы с альфа-каналом существуют хрен знает с какой древности. Вот чего стоило встроить их поддержку в генофонд, всего то одну функцию при отрисовке заменить и подправить конвертацию из других graphic-ов. так в современных версиях Дельфей вроде как с альфа-каналом в битмапе нету проблем ? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2016, 14:43 |
|
Почему происходит искажение глифа при вставке в канву?
|
|||
---|---|---|---|
#18+
defecator, судя по первому посту есть. Может, конечно, это DE косячит с конвертацией, не проверял. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2016, 14:53 |
|
Почему происходит искажение глифа при вставке в канву?
|
|||
---|---|---|---|
#18+
defecator, Есть к сожалению. Загрузить в TImageList без искажений в дизайнтайме полупрозрачную иконку невозможно. Даже если загрузить в рантайме, но использовать TButton с иконкой - все равно проблемы - внутри TButton внутренний TImageList, в который немного криво копируются иконки из используемого ImageList. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2016, 15:40 |
|
Почему происходит искажение глифа при вставке в канву?
|
|||
---|---|---|---|
#18+
Пытливый, Я написал эту функцию для получения действительно корректно полупрозрачного битмапа из TImageList, возможно для TcxImageList тоже подойдет: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2016, 15:44 |
|
Почему происходит искажение глифа при вставке в канву?
|
|||
---|---|---|---|
#18+
errorsoft, В процессе переписывания лишние строчки появились, исправленный вариант: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2016, 15:53 |
|
Почему происходит искажение глифа при вставке в канву?
|
|||
---|---|---|---|
#18+
Спасибо всем откликнувшимся. Прекрасно сработал вариант от Сергея. С ним даже компактнее выходит, битмап не надо создавать промежуточный. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2016, 16:15 |
|
Почему происходит искажение глифа при вставке в канву?
|
|||
---|---|---|---|
#18+
VCL изначально не умеет нормально работать с альфаканалом. Поэтому пытаться отрисовать таковое средствами канвы чревато. И 32-битный bmp файл - это скорее "борландовское изобретение" стандартные виндовские программы его не понимаю и не используют. Более того я на вскидку не скажу какая программа при сохранении позволит сохранить в bmp с альфаканалом. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2016, 23:26 |
|
Почему происходит искажение глифа при вставке в канву?
|
|||
---|---|---|---|
#18+
white_nigger, с чего Вы взяли, что 32-битный bmp файл - это скорее "борландовское изобретение"? Поддержка BMP с битностью 1, 2, 4, 8, 16, 24, 32, 48 и 64 интегрирована в операционные системы Windows. Борланд, если что и сделал, то постарался облегчить работу с API-функциями при работе с графикой. Редактировать и сохранять bmp c альфа-каналом можно в различных программах для работы с графикой, например, всем известном, Photoshop. Другое дело, что в обычной программе для просмотра Вы не увидите прозрачности, но это не значит, что ее там нет и ее нельзя использовать в собственных программах. При работе на уровне API Вам все равно придется иметь дело с BITMAP. Однако, по-сути, данный вопрос выходит за рамки этого топика. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.03.2016, 02:46 |
|
Почему происходит искажение глифа при вставке в канву?
|
|||
---|---|---|---|
#18+
white_nigger, Согласен с предидущим коментарием - 32-битный BITMAP это вполне стандартная фича WinApi, другое дело что далеко не все программы его поддерживают. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.03.2016, 06:45 |
|
Почему происходит искажение глифа при вставке в канву?
|
|||
---|---|---|---|
#18+
Сергей Nwhite_nigger, с чего Вы взяли, что 32-битный bmp файл - это скорее "борландовское изобретение"? Поддержка BMP с битностью 1, 2, 4, 8, 16, 24, 32, 48 и 64 интегрирована в операционные системы Windows. BMP c 48 и 64 bpp не бывает, из стандартных форматов такое поддерживают только PNG и DICOM. Что касается 32 bpp, то изначально 4 байт добавлялся только для ускорения, ибо проц. с триадами работает крайне неэффективно. Такой формат назывался BGRX. Потом решили, что глупо держать пустой байт если можно туда запихнуть альфа-канал, получился формат BGRA. Поскольку эти два формата никак не различимы с т.з. метаданных, способ их обработки целиком и полностью определяется софтом - если хочет использовать альфу, рисует через AlphaBlend, не хочет - обычными функциями. И отдельный вопрос - что именно там кодируется: прозрачность или плотность. Тут в GDI и GDI+ мнения расходятся . ... |
|||
:
Нравится:
Не нравится:
|
|||
14.03.2016, 11:58 |
|
Почему происходит искажение глифа при вставке в канву?
|
|||
---|---|---|---|
#18+
Соколинский Борис, речь шла об общих принципах поддержки BMP, в том числе и Bits Per Pixel ( https://msdn.microsoft.com/en-us/library/windows/desktop/ee719797(v=vs.85).aspx ). Там есть и 48 и 64. Какая-то у Вас вольная трактовка истории развития формата BMP. Речь, наверное, идет о совместимости GDI и GDI+. Там действительно могут быть проблемы, например, с пропаданием альфа канала. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.03.2016, 13:46 |
|
Почему происходит искажение глифа при вставке в канву?
|
|||
---|---|---|---|
#18+
Сергей N, 48bpp в BMP Native Codec все же нет. но про 64bpp - занятная инфа, если еще и работает как положено)) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.03.2016, 14:27 |
|
Почему происходит искажение глифа при вставке в канву?
|
|||
---|---|---|---|
#18+
Сергей NСоколинский Борис, речь шла об общих принципах поддержки BMP, в том числе и Bits Per Pixel ( https://msdn.microsoft.com/en-us/library/windows/desktop/ee719797(v=vs.85).aspx ). Там есть и 48 и 64. Там они может и есть, только в формате BMP их нет. https://msdn.microsoft.com/en-us/library/windows/desktop/dd183391(v=vs.85).aspx Изволите видеть, что и для 4 и для 5 версий на 32 bpp все заканчивается. Также нет их и в описании структуры в памяти https://msdn.microsoft.com/en-us/library/windows/desktop/dd183376(v=vs.85).aspx Видимо, если они и присутствуют, то в каком-то проприетарном формате, с которым непонятно как следует работать. Сергей N Какая-то у Вас вольная трактовка истории развития формата BMP. За давностью лет, возможно чего-то подзабыл, но вряд ли. В оригинальном описании формата 32bpp четко указано: The high byte in each DWORD is not used. Вместе с тем, из описания функции AlphaBlend следует, что в последнем байте все же можно задавать прозрачность https://msdn.microsoft.com/en-us/library/windows/desktop/dd183393(v=vs.85).aspx Вот такая вот загогулина, понимаешь (с) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.03.2016, 17:16 |
|
Почему происходит искажение глифа при вставке в канву?
|
|||
---|---|---|---|
#18+
Сергей N, не путайте файл с расширением BMP (о котором я писал) с понятием BITMAP в GDI. В памяти организация может быть различной, но это не значит, что это будет использоваться в файлах один-в-один. Найдите в своей системе 32-битный файлы BMP. Их там не и никогда не было. Потому как эти файлы использовались когда функции AlphaBlend ещё не было в системе. Поэтому и штатное средство, которое работает с BMP файлами ничего не знает о 32-битном BMP. Когда же появилась задача использовать альфа-канал, то начали использовать PNG. Поэтому ещё раз повторю 32-битный формат BMP - искусственный. То что его поддерживает пара программ, ситуацию не меняет. PS: дле невнимательных, слово изобретение у меня было в кавычках. Наивно думать, что в фирме которая разрабатывает визуальные компоненты, не знают об устройстве картинок. И ссылочка, вами приведенная, извините, совсем о другом ... |
|||
:
Нравится:
Не нравится:
|
|||
14.03.2016, 18:28 |
|
Почему происходит искажение глифа при вставке в канву?
|
|||
---|---|---|---|
#18+
Ещё есть самая лучшая библиотека растровой графики за всё существование Delphi - это Graphics32 http://graphics32.org/wiki/Main/ThirdParty Офигенная, использую с 2001 года. А с персонажем Goodok начинали вместе работать как раз в том же 2001 году над интерфейсов G32 Interface - нам надо было эротично, с антиалиасингом и прочими няшками нарисовать Кремлёвский концертный зал для parter.ru, на который мы вместе пахали за одним столом Там есть и мой говнокод (отрисовка Безье) ) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.03.2016, 18:35 |
|
Почему происходит искажение глифа при вставке в канву?
|
|||
---|---|---|---|
#18+
defecatorв том же 2001 году над интерфейсов G32 Interface - нам надо было эротично, с антиалиасингом и прочими няшками нарисоватьпочему GDI+ не использовали, которая как раз тогда же (?) и вышла с Windows XP? :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.03.2016, 18:41 |
|
Почему происходит искажение глифа при вставке в канву?
|
|||
---|---|---|---|
#18+
Соколинский БорисИзволите видеть, что и для 4 и для 5 версий на 32 bpp все заканчивается.если точнее - 32 битами заканчивается поддержка битмапов в GDI, к которой и относятся эти bitmap header'ы ... |
|||
:
Нравится:
Не нравится:
|
|||
14.03.2016, 18:50 |
|
Почему происходит искажение глифа при вставке в канву?
|
|||
---|---|---|---|
#18+
fd00chdefecatorв том же 2001 году над интерфейсов G32 Interface - нам надо было эротично, с антиалиасингом и прочими няшками нарисоватьпочему GDI+ не использовали, которая как раз тогда же (?) и вышла с Windows XP? :-) Ну, наверное, потому, что не знали про неё, зато хорошо знали про G32 ... |
|||
:
Нравится:
Не нравится:
|
|||
14.03.2016, 18:57 |
|
|
start [/forum/topic.php?fid=58&fpage=6&tid=2036799]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
29ms |
get topic data: |
19ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 150ms |
0 / 0 |