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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.11.2010, 20:56   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
Вопрос Как оптимизировать код перевода BMP в JPEG

Добрый вечер! Сделал перевод из формата BMP в JPEG. Сжатие поставил минимальное. Впринципе устраивает размер получаемых файлов, код работает, все переводится. Но не устраивает скорость работы. Может есть способ как-то оптимизировать и ускорить данный процесс? Вот мой код:
Код:
procedure TMainForm.JPEG1Click(Sender: TObject);
var
 x,y,i:integer;
 b:TBitmap;
 sr:TSearchRec;
 s:string;
 jpg: TJpegImage;
begin
 b:=TBitmap.Create;
 jpg:=TJpegImage.Create;
 FindFirst(MainForm.RzStatusPane2.Caption +'*.bmp',faAnyFile,sr);
 with StringGrid1 do
  for i:=0 to RowCount-1 do begin
   b.LoadFromFile(MainForm.RzStatusPane2.Caption + sr.Name);

   b.Canvas.Font.Color:=clBlack;
   b.Canvas.Rectangle(1290,200,1800,90);
  //îòðèñîâêà ðåïåðîâ (ïðÿìîóãîëüíèêîâ)
   b.Canvas.Brush.Color:=clBlack;
   b.Canvas.Rectangle(1300,125,1325,100);
   b.Canvas.Rectangle(1300,163,1325,188);
   b.Canvas.Rectangle(1760,163,1785,188);
   b.Canvas.Rectangle(1760,125,1785,100);

   b.Canvas.Brush.Color:=clWhite;
   b.Canvas.Font.Color:=clBlack;
   b.Canvas.Font.Size:=50;
   b.Canvas.Font.Name:='Verdana';
   b.Canvas.TextOut(1350,100,Cells[0,i]);
   jpg.Assign(b);
   jpg.CompressionQuality:=1;
   jpg.Compress;
   jpg.SaveToFile(MainForm.RzStatusPane4.Caption + MainForm.StringGrid1.Cells[0,i] + '.jpeg');
   if FindNext(sr)<>0 then break;
  end;
   b.Free;
   jpg.Free;
   FindClose(sr);
   ShowMessage('             Âûïîëíåíî!             ');
 end;
т.е. сначала в переменную типа TBitmap грузятся изображения в формате BMP, затем на них отрисовывается текст, а затем каждое изображение пересохраняется в JPEG формат.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 11.11.2010, 21:00   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

да помоему тут ничего и не сделаешь...
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 11.11.2010, 21:01   #3
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Исходя из размеров которые как я вижу и 1800, правда на 200 по высоте, получаемая скорость думаю предельна.
BOBAH13 вне форума Ответить с цитированием
Старый 11.11.2010, 21:11   #4
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

1800 и 200 - это не размеры изображения. Это координаты прямоугольника. Сохраняемое изображение имеет размер 2408х1882. Значит никак не ускорить? Жалко, думал можно .
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 11.11.2010, 21:29   #5
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,568
По умолчанию

А на что больше времени уходит, на отрисовку или перевод в jpeg?
Arigato вне форума Ответить с цитированием
Старый 11.11.2010, 21:48   #6
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

На пересохранение в jpeg. Например, я открываю папку, в которую сохраняются файлы и вижу, как они туда по 2-3 штуки добавляются. Процесс впринципе по времени не долго идет, но, думал, что можно как-то ускорить не теряя качество файлов, но, если нет, то ладно
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 11.11.2010, 22:10   #7
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,568
По умолчанию

Можно использовать другие форматы, к примеру, BMP+RLE - сжатие без потерь, но размер будет больше jpeg (хотя, это еще от рисунка зависит).
Arigato вне форума Ответить с цитированием
Старый 12.11.2010, 12:18   #8
x128
Форумчанин
 
Регистрация: 03.02.2010
Сообщений: 178
По умолчанию

Цитата:
jpg.CompressionQuality:=1;
При таком качестве от картинки должны остаться только квадратики 8х8 с мусором, соответственно если уменьшить картинку в 8 раз и сжать ее с нормальным качеством, скорость будет на порядок выше и качество картинки останется приемлемым. Можно попробовать PNG, для определенного класса изображений этот формат будет предпочтительней. Для JPEG-a можно использовать библиотеку IJL (Inter JPEG Library), в которой кодирование оптимизировано под современные процессоры и соответственно производительность намного выше стандартного JPEG-а в делфи.
x128 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как оптимизировать код C++ slim>>> Помощь студентам 10 25.01.2011 00:05
Как оптимизировать код Delphi OST_K Помощь студентам 1 30.05.2010 06:59
есть ли компонент,чтобы иметь прямой доступ к пикселям jpeg без конвертирования в bmp? Dima_Dima Свободное общение 1 26.05.2010 19:00
есть ли компонент,чтобы иметь прямой доступ к пикселям jpeg без конвертирования в bmp? Dima_Dima Компоненты Delphi 14 26.05.2010 18:30
Узнать цвет пикселя в Timage, если там не bmp а jpeg? TwiX Общие вопросы Delphi 4 27.09.2009 19:11