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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.03.2009, 01:45   #1
Arkuz
Форумчанин
 
Аватар для Arkuz
 
Регистрация: 22.09.2007
Сообщений: 540
По умолчанию Как улучшить качество скриншота

Здравствуйте. Подскажите, почему такое качество ужасное у скриншота...

Реализую так:
Код:
 canva:=TCanvas.Create;
 canva.Handle:=GetDC(0);
 Image1.Canvas.CopyRect(Rect(0,0,Image1.Width,Image1.Height),
             canva, Rect(0,0,Screen.Width,Screen.Height));

..............................................................

 b:=TBitmap.Create();
 b:=Image1.Picture.Bitmap;
 b.SaveToFile('Screen'+IntToStr(i)+'.bmp');
Вложения
Тип файла: rar Screen16.rar (20.1 Кб, 22 просмотров)
Arkuz вне форума Ответить с цитированием
Старый 10.03.2009, 02:06   #2
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,501
По умолчанию

поставь - image1.Proportional:=true;

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
canva: TCanvas;
b:TBitmap ;
begin
   image1.Proportional:=true;
 canva:=TCanvas.Create;
 canva.Handle:=GetDC(0);
 Image1.Canvas.CopyRect(Rect(0,0,Image1.Width,Image1.Height),
             canva, Rect(0,0,Screen.Width,Screen.Height));

//..............................................................

 b:=TBitmap.Create();
 b:=Image1.Picture.Bitmap;

 b.SaveToFile('c://2ddScreen.bmp');
Alar вне форума Ответить с цитированием
Старый 10.03.2009, 02:14   #3
Arkuz
Форумчанин
 
Аватар для Arkuz
 
Регистрация: 22.09.2007
Сообщений: 540
По умолчанию

Спасибо, но не помогло... Как было так и осталось...
Arkuz вне форума Ответить с цитированием
Старый 10.03.2009, 02:17   #4
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,501
По умолчанию

Arkuz, посмотрите файлик c://2ddScreen.bmp, пожалуйста.

Как минимум также не могло остаться, скрин будет больше размером, чем в вашем вложении
Alar вне форума Ответить с цитированием
Старый 10.03.2009, 03:16   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а для чего ты используешь промежуточный TBitMaP?
ты же можешь сохранить напрямую Image1.Picture.Bitmap
Код:
procedure TForm1.Image1Click(Sender: TObject);
var canva:TCanvas;
begin
 canva:=TCanvas.Create;
 canva.Handle:=GetDC(0);
 Image1.Canvas.CopyRect(Rect(0,0,Image1.Width,Image1.Height),
             canva, Rect(0,0,Screen.Width,Screen.Height));
 Image1.Picture.Bitmap.SaveToFile('pic.bmp');
end;
а в этом коде твоя ошибка в том что ты не меняешь размер BitMaP'ов
потому и ужимает картинку...
добавь это перед копированием области:
Код:
 Image1.Width:=Screen.Width;
 Image1.Height:=screen.Height;
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 10.03.2009 в 04:04.
Пепел Феникса вне форума Ответить с цитированием
Старый 10.03.2009, 12:24   #6
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Эх, лень человеческая... Поиск для кого сделан?
Получайте то, что уже было на форуме:

Как сделать BMP снимок с экрана?

Код от Грузин:
Код:
var
  Desktopcanvas :TCanvas ;
 BitMap  :TBitMap;
begin
  DesktopCanvas:=TCanvas.Create;
  DesktopCanvas.Handle:=GetDC(Hwnd_Desktop);
  BitMap := TBitMap.Create;
  BitMap.Width := Screen.Width;
  BitMap.Height:=Screen.Height;
  Bitmap.Canvas.CopyRect(Bitmap.Canvas.ClipRect,
  DesktopCanvas, DesktopCanvas.ClipRect);
  bitmap.SaveToFile('c:\windows\screen.bmp');
 image1.Picture.LoadFromFile('c:\windows\screen.bmp');
end;
Код от Alar:
Код:
var 
ScreenDC:HDC; 
Canvas:TCanvas; 
Image1:TImage; 
Begin 
ScreenDC := GetDC(0); 
Canvas:=TCanvas.Create(); 
Canvas.Handle:=ScreenDC; 
Image1 := TImage.Create(nil); 
Image1.Width := Screen.Width 
Image1.Height := Screen.Height 
Image1.Canvas.CopyRect(Rect(0, 0, Image1.Width, Image 1.Height), Canvas, Rect(0, 0, Screen.Width, Screen.Height)); 
ReleaseDC(0,ScreenDC); 
Canvas.Free; 
end;
Ну, а это я приводил для JPG:
Код:
var
ScreenDC:HDC;
Canvas:TCanvas;
myjpg:  TJPEGImage;
Image: TImage;
Begin
Image:=TImage.Create(nil);
myjpg:= TJPEGImage.Create;
ScreenDC := GetDC(0); 
Canvas:=TCanvas.Create();
Canvas.Handle:=ScreenDC;
Image.Width := Screen.Width;
Image.Height := Screen.Height;
Image.Canvas.CopyRect(Rect(0, 0, Image.Width, Image.Height), Canvas, Rect(0, 0, Screen.Width, Screen.Height));
ReleaseDC(0,ScreenDC);
myjpg.Assign(Image.Picture.Bitmap);
myjpg.compressionquality:=75; 
{устанавливаем параметры качества. Должно быть от 1 до 100. Если 100, то качество наилучшее, 1 наихудшее}
myjpg.compress; {производим сжатие данных картинки}
myjpg.SaveToFile('c:\prob.jpg');
Image.Free;
Canvas.Free; 
end;
А вот еще интересная функция:
Код:
PaintDeskTop(Form1.Canvas.Handle);
Она закрашивает фон формы Form1 фоновым рисунком рабочего стола (или цветом, если рисунка нет).

Последний раз редактировалось mihali4; 10.03.2009 в 13:01.
mihali4 вне форума Ответить с цитированием
Старый 10.03.2009, 18:52   #7
Arkuz
Форумчанин
 
Аватар для Arkuz
 
Регистрация: 22.09.2007
Сообщений: 540
По умолчанию

Спасибо.....
Arkuz вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как улучшить форум. Гриха О форуме и сайтах клуба 2798 30.11.2011 03:03
Как можно улучшить эффективность и качество ПП? Evgenii Помощь студентам 5 29.01.2009 16:22
Качество печати Македонский Общие вопросы Delphi 2 14.01.2008 22:46
Передача скриншота Terran Работа с сетью в Delphi 1 17.12.2007 21:41