Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.25;
Скачать: CL | DM;

Вниз

Нужна функция сжатия изображения, но не 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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.045 c
3-1088763135
Alexa
2004-07-02 14:12
2004.07.25
Добавление вычисляемого поля в Query


3-1088583709
_serg_
2004-06-30 12:21
2004.07.25
Нахождение запросов, отдающих большой набор данных (в байтах)


1-1089552359
Tahion2
2004-07-11 17:25
2004.07.25
Добавить прозрачную Label на CoolBar без полосы.


3-1087997050
overstep
2004-06-23 17:24
2004.07.25
Получение выходного параметра


3-1088584564
Ross
2004-06-30 12:36
2004.07.25
Транзакции