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

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

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.12.2012, 22:58   #1
Кортана
Заблокирован
 
Регистрация: 11.12.2012
Сообщений: 22
По умолчанию Программа делает слишком тяжелые скриншоты

Привет всем.
У меня такая проблема: я написала программу, делающую скриншоты с помощью вот этого кода:
Код:
var
S : TCanvas;
V : HDC;
begin
V := GetDC(0);
S := TCanvas.Create();
S.Handle := ScreenV;
Image1.Canvas.CopyRect(Rect(0, 0, Image1.Width, Image1.Height),
S, Rect(0, 0, Screen.Width, Screen.Height));
ReleaseDC(0, ScreenV);
S.Free;
Image1.Picture.SaveToFile('Image.jpg');
Но тут у меня возникла одна проблема: вес получаемых скриншотов. Они идут от двух мегабайт и более. Нельзя ли, как-то уменьшить их вес, чтобы при тех же размерах картинок, вес был бы меньше, в пределах сотен килобайт, хотя бы?
Кортана вне форума Ответить с цитированием
Старый 14.12.2012, 23:01   #2
Delphi_ProGer
Форумчанин
 
Регистрация: 30.10.2010
Сообщений: 524
По умолчанию

Делайте компрессию jpeg.
Delphi_ProGer вне форума Ответить с цитированием
Старый 14.12.2012, 23:02   #3
Кортана
Заблокирован
 
Регистрация: 11.12.2012
Сообщений: 22
По умолчанию

Цитата:
Делайте компрессию jpeg.
А как ее сделать?
Кортана вне форума Ответить с цитированием
Старый 14.12.2012, 23:14   #4
Delphi_ProGer
Форумчанин
 
Регистрация: 30.10.2010
Сообщений: 524
По умолчанию

Например,
Код:
jpg.CompressionQuality:=30;
jpg.Compress;
Delphi_ProGer вне форума Ответить с цитированием
Старый 14.12.2012, 23:24   #5
Кортана
Заблокирован
 
Регистрация: 11.12.2012
Сообщений: 22
По умолчанию

Цитата:
Например,
Код:

jpg.CompressionQuality:=30;
jpg.Compress;
А можно полный код?
Кортана вне форума Ответить с цитированием
Старый 14.12.2012, 23:27   #6
Delphi_ProGer
Форумчанин
 
Регистрация: 30.10.2010
Сообщений: 524
По умолчанию

Код:
uses jpeg;

var
S : TCanvas;
V : HDC;
jpg: tjpegimage;
begin
jpg:=Tjpegimage.create;
V := GetDC(0);
S := TCanvas.Create();
S.Handle := ScreenV;
Image1.Canvas.CopyRect(Rect(0, 0, Image1.Width, Image1.Height),
S, Rect(0, 0, Screen.Width, Screen.Height));
ReleaseDC(0, ScreenV);
S.Free;
//Image1.Picture.SaveToFile('Image.jpg');
jpg.assign(image1.picture);
jpg.CompressionQuality:=30;
jpg.Cpmpress;
jpg.free;
Код писал здесь, поэтому не знаю, будет ли работать, и уменьшиться ли размер изображения.

Последний раз редактировалось Delphi_ProGer; 14.12.2012 в 23:31.
Delphi_ProGer вне форума Ответить с цитированием
Старый 14.12.2012, 23:37   #7
Кортана
Заблокирован
 
Регистрация: 11.12.2012
Сообщений: 22
По умолчанию

Цитата:
jpg.CompressionQuality:=30;
И напоследок, еще один вопрос: что означает число 30?
Кортана вне форума Ответить с цитированием
Старый 14.12.2012, 23:39   #8
Delphi_ProGer
Форумчанин
 
Регистрация: 30.10.2010
Сообщений: 524
По умолчанию

Цитата:
Сообщение от Кортана Посмотреть сообщение
И напоследок, еще один вопрос: что означает число 30?
Процент качества, или как то так.
Delphi_ProGer вне форума Ответить с цитированием
Старый 14.12.2012, 23:49   #9
Кортана
Заблокирован
 
Регистрация: 11.12.2012
Сообщений: 22
По умолчанию

Цитата:
Код писал здесь, поэтому не знаю, будет ли работать, и уменьшиться ли размер изображения.
Действительно не работает, программа выкидывает сообщение: cannot assign TPicture to a JPEGImage. И вес получаемого скриншота, остается таким же огромным.
Кортана вне форума Ответить с цитированием
Старый 15.12.2012, 00:14   #10
Delphi_ProGer
Форумчанин
 
Регистрация: 30.10.2010
Сообщений: 524
По умолчанию

Это...лучше посмотреть, как делают другие)
http://www.swissdelphicenter.ch/torr...ode.php?id=259
http://delphi.about.com/od/adptips19...screenshot.htm

Там изображение сохраняеться в формат .bmp(см. параметр ф-й).
Для уменьшения размера, попробуйте такое:
Код:
uses jpeg;

...
var
  jpg: Tjpegimage;
begin
jpg:=Tjpegimage.create;
jpg.assign(bmp); //где bmp - изображение, полуяченое функцией, которое есть по ссилке вверху
jpg.CompressionQuality:=30; // ваше значение
jpg.Compress;
jpg.free;
end;
Ану, пробуйте.


_____________
Цитата:
выкидывает сообщение: cannot assign TPicture to a JPEGImage
Попробуйте немного изменить код:
Код:
jpg.assign(image1.picture.graphic);

Последний раз редактировалось Delphi_ProGer; 15.12.2012 в 00:17.
Delphi_ProGer вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа которая делает кроссворд Иллидан Софт 15 02.12.2014 06:34
Что делает эта программа?(код) Kampainn5 Общие вопросы по Java, Java SE, Kotlin 2 19.09.2012 22:24
что делает программа? Настёнка1512 Помощь студентам 1 19.12.2011 06:50
что делает программа& Chena Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 04.05.2011 12:40
Что делает программа (забыл) С\С++ Айдар Помощь студентам 6 27.06.2010 12:39