@tabbols95
Недопрограммист

Как сжать размер сохраняемого файла в Delphi?

Есть изображение, вес которого равняется 558 Кб (скриншот)
С помощью кода на изображение накладывается текст и сохраняет изображение с текстом уже с размером 6,5 Мб, как можно сжать вес изображения при сохранении?
procedure TForm1.Button1Click(Sender: TObject);
var r : integer;
    numberStr : string;
    SR : tSearchRec;
    jpg:TJpegimage;
begin
Memo1.Clear;
numberStr:=Memo2.Lines[0];
r := FindFirst(Edit1.Text+numberStr+'.jpg', faAnyFile, SR);
  if r = 0 then begin
    Memo1.Lines.Add('Screen : '+FormatDateTime('mm/dd/yyyy hh:nn:ss',
      FileAccessDateToDateTime(SR.FindData.ftCreationTime)));
  end;
jpg:=TJpegImage.Create;
jpg.LoadFromFile(Edit1.Text+numberStr+'.jpg');
with Image1 do
 begin
   canvas.font.Size:=26;
   canvas.Font.Color:=clRed;
   picture.Bitmap.Assign(jpg);
   canvas.Brush.Style:=bsClear;
   canvas.TextOut(10,20,Memo1.Lines[0]);
   picture.SaveToFile(Edit1.Text+numberStr+'(number).png');
 end;
 Memo2.Lines.Delete(0);
end;
  • Вопрос задан
  • 458 просмотров
Решения вопроса 1
@tabbols95 Автор вопроса
Недопрограммист
В итоге подредактировал по примерам kalapanga и добился результата
jpg.Assign(Image1.Picture.Graphic);
     jpg.CompressionQuality := 100;
     jpg.Compress;
     jpg.SaveToFile(Edit1.Text+'\SnapShots(new)\'+numberStr+'(new).bmp');
     jpg.Free;
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@kalapanga
TPicture про png ничего не знает. Посмотрите файл, он у Вас только с расширением png, а внутри обычный битмап. Нужно обратно к соответствующему классу перейти (TJPEGImage, TPNGImage):
jpgout := TJPEGImage.Create;
  try
    with jpgout do
    begin
      Assign(Image1.Picture.Bitmap);
      SaveToFile('myfile.jpg');
    end;
  finally
    jpgout.Free;
  end;
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы