Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.03.2009, 16:46   #1
Dr. MefistO
Пользователь
 
Регистрация: 22.03.2009
Сообщений: 25
Восклицание Качественное изменение размера изображения...

В общем, мне необходимо открыть изображение, и, если его ширина больше XXX, то уменьшить его пропорционально до YYY, при этом мелкие элементы не должны сливаться, как это получается в ДАННОЙ теме, ну и сохранить готовое изображение...
Входные форматы: PNG, GIF, JPG...
З.Ы. Заранее спасибо!
Dr. MefistO вне форума Ответить с цитированием
Старый 22.03.2009, 17:02   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

А где тут вопрос, я что-то не заметил. Вы сначала попробуйте задать вопрос, а то звучит так как будто вот задание сделайте, а я вам Спасибо дам.

Михалыч, вот еще человек хочет штраф

По "вопросу":

w1 - ширина файла
h1 - высота файла
w2 - максимальная ширина
h2 - максимальная высота

Код:
if (w2 < w1) or (h2 < h1) then
   k := Min(w2 / w1, h2 / h1)
else
   k := 1;
Новый файл размером:

w1 * k - ширина
h1 * k - высота

В чем проблема ? Как нарисовать чтоли без потерь ? Тогда GDI+ и там используйте интерполяцию к примеру самая лучшая эта - высококачественная билинейная интерполяция.

Последний раз редактировалось BOBAH13; 22.03.2009 в 17:06.
BOBAH13 вне форума Ответить с цитированием
Старый 22.03.2009, 17:05   #3
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Нет, он не штраф хочет...
Он хочет уменьшить картинку до размера одного пикселя и чтобы при этом не потерялись мелкие детали изображения...
mihali4 вне форума Ответить с цитированием
Старый 22.03.2009, 17:05   #4
Dr. MefistO
Пользователь
 
Регистрация: 22.03.2009
Сообщений: 25
По умолчанию

Хорошо, вот вопрос:
Как открыть изображение, и, если его ширина больше XXX, то уменьшить его пропорционально до YYY, при этом мелкие элементы не должны сливаться, как это получается в ДАННОЙ теме, ну и сохранить готовое изображение?
Входные форматы: PNG, GIF, JPG...
Не в один пиксель - читаем внимательно вопрос....
Dr. MefistO вне форума Ответить с цитированием
Старый 22.03.2009, 17:37   #5
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Создавайте свой собственный критерий "похожести" смежных пикселей, сканируйте картинку построчно, анализируйте смежные пиксели в строке и в смежных строках и принимайте решение - объединять их или нет.
Вопрос изначально бредовый. Пусть на изображении изначально имеется красный квадрат 3х3 пикселя и картинку нужно уменьшить в два раза.
В уменьшенном изображении возможны только 2 варианта: 1х1 или 2х2, но никак не 1,5х1,5...
Изучите алгоритм JPEG-преобразования - там такие вопросы решаются замещающими цветами, могущими создать соответствующую иллюзию.
Но это влечет за собой искажения.
Так что на готовый алгоритм или кусок кода не рассчитывайте - придется использовать свое серое вещество...
mihali4 вне форума Ответить с цитированием
Старый 15.07.2009, 17:22   #6
rruuss
Новичок
Джуниор
 
Регистрация: 15.07.2009
Сообщений: 1
Восклицание Сглаженно изменить размер картинки

Можно воспользоваться библиотекой GDI+!

У себя цепляем модуль - GDIPOBJ

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, ExtCtrls, ToolWin, StdCtrls, GDIPOBJ;

Пишем функцию:

procedure LoadAAImageFromFile(FileName: String; W,H: Integer; Pic: TBitmap);
var ImageTemp: TGPImage;
graphicsGDIPlus: TGPGraphics;
begin
if FileExists(FileName) then
begin
Pic.Width:=W;
Pic.Height:=H;
graphicsGDIPlus:=TGPGraphics.Create (Pic.Canvas.Handle);
ImageTemp:=TGPImage.Create(FileName );
graphicsGDIPlus.DrawImage(ImageTemp , 0,0,W,H);
ImageTemp.Free;
graphicsGDIPlus.Free;
end;
end;

FileName - имя загружаемого файла, может быть в форматах: bmp, gif, jpg, png или tif.

W и H - размеры результирующей картинки

Pic - выходная картинка (далее ее можно сохранить в файл, например bmp)
rruuss вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменение размера окна Anfall Общие вопросы Delphi 5 14.03.2009 10:06
Вопрос по C++ Builder (изменение размера StringGrid) Sad_SmiliK Помощь студентам 2 11.03.2009 18:20
Изменение размера шрифта Nando Microsoft Office Excel 4 07.03.2009 16:45
Изменение размера картинки Борис Низов PHP 6 09.12.2007 16:26
Изменение размера изображения, Crop image to fit height & width loopy-need Общие вопросы Delphi 4 23.11.2006 10:23