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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.07.2010, 19:20   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
Вопрос Большой объем файла после создания скриншота. Как уменьшить?

Есть программка в наличии, с помощью которой делается скриншот экрана и сохраняется в папку с прогой. Проблема в том, что сделанный имеет слишком большой размер независимо от расширения, будь то BMP, либо JPEG. Размер одного файла = ~5Mb. Вот процедура создания скриншота:
Код:
procedure GetRS(RS:TBitmap; Path: string);
var
 c: TCanvas;
 r: TRect;
begin
 c:=TCanvas.Create;
 c.Handle:=getWindowDC(GetDesktopWindow);
 try
  r:=Rect(0,0,screen.Width,screen.Height);
  RS.Width:=screen.Width;
  RS.Height:=screen.Height;
  RS.Canvas.CopyRect(r,c,r);
  RS.SaveToFile(Path);
 finally
  ReleaseDC(0,c.Handle);
  c.Free;
 end;
end;
А вот ее вызов:
Код:
procedure TForm1.BtnInsertImageClick(Sender: TObject);
var
 b: TBitMap;
begin
 b:=TBitMap.Create;
 GetRS(b,ExtractFilePath(Application.ExeName) + IntToStr(i) + '.bmp');
 b.Free;
 Inc(i);
end;
Вопрос: как уменьшить объем созданного файла?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 19.07.2010, 19:31   #2
DIgorevich
Погулять вышел
Участник клуба
 
Аватар для DIgorevich
 
Регистрация: 17.05.2010
Сообщений: 1,573
По умолчанию

Ты независимо от расширения получаешь битмап, т.е бмп файл, а надо еще пережать его в jpg. вот исправил твоё (добавь в uses jpeg):
Код:
procedure GetRS(RS:TBitmap; Path: string);
var
 c: TCanvas;
 r: TRect;
 jpgImg: TJPEGImage;
begin
 c:=TCanvas.Create;
 c.Handle:=getWindowDC(GetDesktopWindow);
 try
  r:=Rect(0,0,screen.Width,screen.Height);
  RS.Width:=screen.Width;
  RS.Height:=screen.Height;
  RS.Canvas.CopyRect(r,c,r);
  RS.SaveToFile(Path);
  jpgImg := TJPEGImage.Create;
  jpgImg.Assign(RS);
  jpgImg.SaveToFile(Path)
 finally
  ReleaseDC(0,c.Handle);
  c.Free;
  jpgImg.Free;
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 b: TBitMap;
begin
 b:=TBitMap.Create;
 GetRS(b,ExtractFilePath(Application.ExeName) + IntToStr(i) + '.jpg');
 b.Free;
 Inc(i);
end;
Никогда не знаешь, где тебе повезет... (Фрай)
DIgorevich вне форума Ответить с цитированием
Старый 19.07.2010, 19:37   #3
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Хм...внес изменения, а при запуске программы получается, что она как бы становится неактивной, т.е. я не могу нажать ни на одну кнопку и т.д...
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 19.07.2010, 19:40   #4
DIgorevich
Погулять вышел
Участник клуба
 
Аватар для DIgorevich
 
Регистрация: 17.05.2010
Сообщений: 1,573
По умолчанию

код в студию! или сразу проект... Т.к. у меня всё работает.
Никогда не знаешь, где тебе повезет... (Фрай)
DIgorevich вне форума Ответить с цитированием
Старый 19.07.2010, 19:43   #5
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Да в проекте ничего нет, кроме того кода, что я выложил. У меня почему-то кнопки и ComboBox не работают. А Edit работает . ХЗ)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 19.07.2010, 19:46   #6
DIgorevich
Погулять вышел
Участник клуба
 
Аватар для DIgorevich
 
Регистрация: 17.05.2010
Сообщений: 1,573
По умолчанию

может глюк какой? мой проект целиком вот:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,jpeg, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
procedure GetRS(RS:TBitmap; Path: string);
var
 c: TCanvas;
 r: TRect;
 jpgImg: TJPEGImage;
begin
 c:=TCanvas.Create;
 c.Handle:=getWindowDC(GetDesktopWindow);
 try
  r:=Rect(0,0,screen.Width,screen.Height);
  RS.Width:=screen.Width;
  RS.Height:=screen.Height;
  RS.Canvas.CopyRect(r,c,r);
  RS.SaveToFile(Path);
  jpgImg := TJPEGImage.Create;
  jpgImg.Assign(RS);
  jpgImg.SaveToFile(Path)
 finally
  ReleaseDC(0,c.Handle);
  c.Free;
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 b: TBitMap;
begin
 b:=TBitMap.Create;
 GetRS(b,ExtractFilePath(Application.ExeName) + '.jpg');
 b.Free;
end;

end.
Никогда не знаешь, где тебе повезет... (Фрай)
DIgorevich вне форума Ответить с цитированием
Старый 19.07.2010, 19:48   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

утечка памяти детектед
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 19.07.2010, 19:52   #8
DIgorevich
Погулять вышел
Участник клуба
 
Аватар для DIgorevich
 
Регистрация: 17.05.2010
Сообщений: 1,573
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
утечка памяти детектед
А ну да.... забыл дописать после finally
jpgImg.Free;

Спасибо!
Никогда не знаешь, где тебе повезет... (Фрай)
DIgorevich вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как уменьшить размер .ехе файла? D7 dx+ Общие вопросы Delphi 28 16.03.2012 20:38
Огромный объем файла ABCOz Microsoft Office Excel 9 23.03.2010 13:26
как узнать дату создания файла green-shrek Помощь студентам 5 25.02.2010 17:33
Delphi и большой объем текста BuT@JL Помощь студентам 3 13.03.2009 13:53
Как установить дату создания файла vitalik007 Общие вопросы Delphi 1 11.12.2007 20:15