| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Быстрое отображение TGraphic |
| Автор: Illusion Dolphin 13.8.2004, 21:30 | ||||
Пусть имеется
Мы туда поместили какое-то изображение (или JPEG или GIF или PSD или ещёчто-нибудь) и теперь очень хочется отобразить его в области 100х100 пикселей, причём чтобы при этом использовался не убогий StretchDraw, а другой алгоритм отображения со сглаживанием. Можно ли такое осуществить без использования промежуточной битмапки (или даже 2 у меня получается)? Есть ли БЫСТРЫЕ алгоритмы прорисовки со сглаживанием? Я обычно длаю так, но мне мало:
Что-то кажется, что можно быстрее... Кто-нибудь знает, как? |
| Автор: p0s0l 14.8.2004, 01:11 | ||
Делал однажды предварительный просмотр для печати, и там сделал такую процедурину для уменьшения картинки с "глаживанием" - должна быть побыстрее твоей, т.к. используются только целочисленные операции, да и к тому же прооптимизировал её как мог (а твоя процедурина почему-то не захотела работать
|
| Автор: Illusion Dolphin 14.8.2004, 08:29 | ||||
p0s0l: Спасибо за пример, попробую. Я как только отослал свою функцию, так сразу увидел, что её можно оптимизировать ещё (писал даааавно). Но интересует всёже один момент. Ведь в начале у меня имеется TGraphic, а в конечном итоге мне нужно отобразить его на TBitmap. Так можно ли сделать функцию вида:
В которой GrpIn не будет предварительно преобразовываться в TBitmap, в можно будет работать именно с GrpIn? Если взять JPEG, то там имеется такая вещь: при попытке прорисовки она сначала декодируется, а потом уже прорисовывается, так можно ли в таком случае сделать что-то вроде этого:
8) Иначе говоря - сгладить и уменьшить - это одно, но нужно ещё и сам "технологический процесс" отладить, т.к. промежуточныйе битмапы, на мой взгляд, можно убрать... но как? |
| Автор: Illusion Dolphin 14.8.2004, 12:43 | ||||
| И ещё! Что значат
и
? С +1 проблемы с преобразованием при низком коэффициенте уменьшения (первая строка (как и полоска слева) - не обрабатывается) |
| Автор: p0s0l 14.8.2004, 17:38 | ||||||||
Да, это моя недодумка, +1 нужен, иначе будут некрасивости, т.к. одна и та же линия будет считаться в нескольких линиях одновременно... Для исправления надо сделать: yi2 := -1; ... xi2 := -1; ДОБАВЛЕНО ПОЗЖЕ:
Тоже однажды пытался обойти этот момент... Единственное, что я тогда придумал, это типа такого способа (сразу исправленный вариант):
Т.е. надо учитывать каждый возможный наследник TGraphic, который может прийти в QuickReduce, для неучтенных наследников сделан способ через промежуточный битмап... Для TJPEGImage надо делать через взлом класса - вынос Bitmap в Public-часть... Сомневаюсь, что можно как-то легче, т.к. у самого TGraphic нет такого свойства как Bitmap вообще... |