Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
3-1088575902
Explorer
2004-06-30 10:11
2004.07.25
работа через web


14-1089021380
VEG
2004-07-05 13:56
2004.07.25
Подхватил какой-то троянец


4-1087289408
sashok
2004-06-15 12:50
2004.07.25
Как узнать цвет точки под мышкой?


3-1088681917
Sir John
2004-07-01 15:38
2004.07.25
Передача структуры таблицы


14-1089283653
TohaNik
2004-07-08 14:47
2004.07.25
Вот не знаю... радоваться или огорчаться?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский