Форум: "Основная";
Текущий архив: 2004.07.25;
Скачать: [xml.tar.bz2];
ВнизНужна функция сжатия изображения, но не TCanvas.StretchDraw Найти похожие ветки
← →
Курдль © (2004-07-09 10:45) [0]Требуется уменьшить исходное изображение в N раз. Но без потери информации о цвете каждого пикселя в исходном изображении.
Естественно, я не искал легких путей и сделал свою процедурину, где все пиксели, входящие в квадрат исходного изображения N*N суммируются по RGB и делятся на площадь, а потом заносятся в конечное изображения. Но делается это не быстро.
Существуют ли стандартные аналоги, или функции доп. библиотек?
← →
Amoeba © (2004-07-09 10:52) [1]Стандартных аналогов вроде бы нет. А что касается сторонних библиотек, то они скорее всего делают это по сходному алгоритму, только его реализация очень хорошо оптимизирована.
В свое время на сайте INTEL была бесплатная отлично оптимизированная библиотека (DLL в несколько Mb, к ней даже .pas файл был, а также Help) для различной трансформации изображений. Но сейчас, увы, она более недоступна на халяву. Я ее в свое время скачал, но она ушла в небытие вместе накрывшимся жестким диском.
← →
TUser © (2004-07-09 10:56) [2]
> Требуется уменьшить исходное изображение в N раз. Но без
> потери информации о цвете каждого пикселя в исходном изображении.
На сомом деле не очень понятно, что же собственно тебе надо. Судя по приведенному описанию инфа о цвете каждого пикселя как раз теряется.
Для ускорения - см ScanLine. Есть еще статья на этом сайте про бытрую работу с BitMap.
← →
Курдль © (2004-07-09 11:02) [3]
> TUser © (09.07.04 10:56) [2]
> На сомом деле не очень понятно, что же собственно тебе надо.
> Судя по приведенному описанию инфа о цвете каждого пикселя
> как раз теряется.
Не теряется. Поясню на примере одной строки.
Пусть надо уменьшить изображение втрое.
Стандартная TCanvas.StretchDraw пробежится по каждому 3-му пикселю в исходной строке и если в нем было черное - запишет в конечное изображение черное, а если белое - то белое. Информация о 2-х пропущеных пикселях потеряется. В моем же случае в конечном изображении получится оттенок серого, в соотв. со средним арифметическим всех 3-х пикселей.
← →
MBo © (2004-07-09 12:41) [4]SetStretchBltMode используй с HALFTONE
← →
TUser © (2004-07-09 14:09) [5]Восстановить-то ты исходное изображение уже не сможешь. Значит информация потеряна (на самом деле при небольших изменения до некоторого предела картинка подлежит восстановлению - если фурье спектры в маленьком изображении не стали пересекаться). А чтобы побыстрее - ScanLine или [4].
← →
Jeer © (2004-07-09 15:54) [6]Курдль © (09.07.04 10:45)
>Требуется уменьшить исходное изображение в N раз. Но без потери >информации о цвете каждого пикселя в исходном изображении.
Есть файл 100*100.
Уменьшаем его в 10000 и получаем 1 px.
А где остальные 9999 px ?
Потерялись:)
← →
TUser © (2004-07-09 18:12) [7]
> А где остальные 9999 px ?
> Потерялись:)
Потерялись все. Но появился один новый.
← →
Курдль (2004-07-09 22:55) [8]
> TUser © (09.07.04 14:09) [5]
> Восстановить-то ты исходное изображение уже не сможешь.
Ок, коллега! Ценб твоё стремление к фундаментальным исследованиям! Однако здеся, в большинстве своем, собираются программеры, которые догадываются, что если сжать изображение (звук или даже сплющить автомобиль), то увидеть/услышать/поехать, как прежде не удастся! :)
Еще раз извиняюсь за неточность формулировки - я имел в виду "...без потери на глаз"
> MBo © (09.07.04 12:41) [4]
> SetStretchBltMode используй с HALFTONE
Огромное спасибо! Все заработало! Но считаю своим долгом доложить, чтоSetStretchBltMode(DstCanvas.Handle, HALFTONE);
не отрабатывает сDstCanvas.StretchDraw(FrealRect, SrcGraphics);
а лишь сStretchBlt(DstCanvas.Handle, 0, 0, x, y, SrcCanvas.Handle, 0, 0, X, Y, SRCCOPY);
Кроме того, на заднем плане возникает еле различимый "мусор" (видимо из-за погрешностей округлания) и режим HALFTONE сбрасывается после выполнения.
← →
Dimaxx (2004-07-09 23:16) [9]Попробуй еще COLORONCOLOR
← →
Курдль © (2004-07-13 15:44) [10]
> Dimaxx (09.07.04 23:16) [9]
> Попробуй еще COLORONCOLOR
Спасибо, попробовал. Не подошло. На всякий случай попробовал все варианты этого параметра - подходит только HALFTONE :)
Но существует одна проблема - самопроизвольная окантовочка справа и снизу. Как бы ее побороть?..
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.07.25;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.046 c