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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.10.2010, 16:12   #1
chandrasecar
Форумчанин
 
Аватар для chandrasecar
 
Регистрация: 03.10.2008
Сообщений: 180
По умолчанию Программное открытие изображение, изменение размера, сохранение без потерь

Посоветуйте. Мне нужно: программно открыть изображение и изменить его размер, причем изменяя ширину, высота должна изменяться пропорционально. После нужно сохранить изображение под др. именем. При всех этих операциях изображение не должно терять качество (кроме случая изменения размера). Форматы изображений: TIFF, JPEG.
Заранее благодарю за дельные советы.
лучший подарок женщине-программисту
chandrasecar вне форума Ответить с цитированием
Старый 25.10.2010, 16:47   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

И в чем затруднения ?
Например:
Код:
var
  Form1: TForm1;
  k: extended;
...
procedure TForm1.Button1Click(Sender: TObject);
begin
Image1.AutoSize:=True;
Image1.Stretch:=True;
if OpenDialog1.Execute then
Image1.Picture.LoadFromFile(OpenDialog1.FileName);
Image1.Repaint;
Application.ProcessMessages;
k:=Image1.Width/Image1.Height;
Image1.AutoSize:=False;
Application.ProcessMessages;
TrackBar1.Max:=Image1.Height*2;
TrackBar1.Position:=Image1.Height;
end;

procedure TForm1.TrackBar1Change(Sender: TObject);
begin
Image1.Height:=TrackBar1.Position;
Image1.Width:=Round(Image1.Height*k);
end;
С диалогом сохранения, надеюсь, справитесь?
Если нет - качайте книгу "100 компонентов Дельфи" и пусть она будет вашей настольной книгой:
http://www.programmersclub.ru/
mihali4 вне форума Ответить с цитированием
Старый 25.10.2010, 18:48   #3
chandrasecar
Форумчанин
 
Аватар для chandrasecar
 
Регистрация: 03.10.2008
Сообщений: 180
По умолчанию

Спасибо. Я уже разобрался с открытием и сохранением - это ерунда. А вот изменение размера без потери качества не получается с моим кодом. Например если изменять размер изображения кот. весит 5Мб моей программой, то получается 82 Кб (+ большая зершистость), а если фотошопом - 275 Кб.
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  bmp: TBItmap;
  jpg: TJpegImage;
  scale: Double;
begin
  if opendialog1.execute then
  begin
    jpg := TJpegImage.Create;
    try
      jpg.Loadfromfile( opendialog1.filename );
      if jpg.Height > jpg.Width then
        scale := 50 / jpg.Height
      else
        scale := 50 / jpg.Width;
      bmp:= Tbitmap.Create;
      try
        {Create thumbnail bitmap, keep pictures aspect ratio}
        bmp.Width := Round( jpg.Width * scale );
        bmp.Height:= Round( jpg.Height * scale );
        bmp.Canvas.StretchDraw( bmp.Canvas.Cliprect, jpg );
        {Draw thumbnail as control}
        Self.Canvas.Draw( 100, 10, bmp );
        {Convert back to JPEG and save to file}
        jpg.Assign( bmp );
        jpg.SaveToFile(ChangeFileext( opendialog1.filename, '_thumb.JPG' ));
      finally
        bmp.free;
      end;
    finally
      jpg.free;
    end;
  end;
end;
Можно попробовать ваш код, но я не вижу разницы...
лучший подарок женщине-программисту
chandrasecar вне форума Ответить с цитированием
Старый 25.10.2010, 18:54   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Сообщение от chandrasecar Посмотреть сообщение
А вот изменение размера без потери качества не получается с моим кодом.
А оно и не получится. Это довольно сложный вопрос и существует не так уж и много специализированных программ, которые позволяют сглаживать потерю качества...
Представьте себе, что у вас на рисунке где-то есть группа пикселов
красный -> зеленый
белый -> красный
При уменьшении картинки ровно в 2 раза эти 4 пиксела превращаются в один.
И какой цвет ему задать ?
mihali4 вне форума Ответить с цитированием
Старый 25.10.2010, 19:04   #5
chandrasecar
Форумчанин
 
Аватар для chandrasecar
 
Регистрация: 03.10.2008
Сообщений: 180
По умолчанию

Я вас понял. Если можно такое сделать, значит будем делать...
Спасибо за помощь.


Я нашел компонент ImageEn. Получилось менять размер изображения и сохранять в файл. Есть фильтры сглаживания. Картинка очень хорошая получается. Но качество не дотягивает, идет какое-то сжатие, размер файла 407*675 56Кб против 200Кб Фотошопа.

Кто работал с ImageEn? Может есть возможность как-то это исправить?
лучший подарок женщине-программисту

Последний раз редактировалось chandrasecar; 25.10.2010 в 23:51.
chandrasecar вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программное изменение свойств UserForm по умолчанию alvazor Microsoft Office Excel 16 17.08.2010 17:47
C++ - изменение размера массива kefir Помощь студентам 1 19.06.2010 11:42
Программное изменение шрифта _-Re@l-_ Общие вопросы Delphi 5 15.05.2010 18:13
Программное изменение параметров радиоэлементов. Rapid Компьютерное железо 1 26.01.2010 09:57
Программное обращение к свойствам файлов и их изменение lemonhead Общие вопросы Delphi 1 24.07.2008 10:20