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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.12.2021, 02:24   #1
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 627
По умолчанию Узнать размер не созданного изображения

Есть объект TJpegImage
У него задан параметр качества
Код:
jpg.CompressionQuality := 70;
Нужно узнать, какого размера будет полученный файл, если сохранить это изображение в файл.

Возможно ли это узнать не сохраняя файл на жесткий диск?

Если да, то как?

(У меня задача такая, что нужно сначала узнать размер файла, а потом принимать решение сохранять ли его)
Kronos913 вне форума Ответить с цитированием
Старый 23.12.2021, 05:25   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Сохранить картинку в MemoryStream и узнать его размер.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 23.12.2021, 14:09   #3
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 627
По умолчанию

Правильно сделал?
Задача - при перемещении файла сначала попробовать его открыть и сохранить - если таким образом файл уменьшится в размерах, то сохранить "обработанную" версию, если не уменьшится - то оставить исходную

JpgLoadBmp - функция, которая загружает jpg файл в BitMap

512 байт добавляю потому что открыть-сохранить уже обработанный jpg - там происходят небольшие колебания размеров

Код:
Function JpgCleverMoveFile(const start_name, finish_name: string): boolean;
var
  bmp:TBitMap;
  Stream: TMemoryStream;
  jpg:TJpegImage;
 
begin
  If not(start_name=finish_name) then begin
    bmp:=TBitMap.create;
    If JpgLoadBmp(start_name, bmp) then begin
      jpg:=TJpegImage.Create;
      Stream:=TMemoryStream.Create;

      jpg.CompressionQuality := JpgCQ;
      jpg.Assign(bmp);
      jpg.SaveToStream(Stream);

      If GetFileSize(start_name) > (Stream.Size+512) then begin
        jpg.SaveToFile(finish_name);
        If FileExists(finish_name) then begin
          FileSetDate(finish_name, FileAge(start_name));
          DeleteFile(start_name);
          Result:=true;
        end else Result:=False;
      end else begin
        Result:=MoveFile(PChar(start_name), PChar(finish_name));
      end;
      jpg.Free;
      stream.Free;
    end;
    bmp.Free;
  end else result:=false;
end;
Kronos913 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как узнать имя динамическо созданного Shape Максим139 Помощь студентам 5 21.08.2011 21:39
Размер изображения VistaSV30 HTML и CSS 11 16.10.2010 00:45
размер изображения TaTT DoGG Общие вопросы .NET 6 05.03.2010 19:24
Как узнать размер изображения Lokos Мультимедиа в Delphi 3 21.12.2009 16:44
Размер изображения guffer Мультимедиа в Delphi 6 10.07.2009 17:50