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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.04.2010, 22:17   #1
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
Восклицание при изменении разрешения картинки , BitBlt обрезает её..

собственно суть такова:
Программа снимает скриншоты , у пользователя к примеру разрешение экрана 1280x1024 , он может выставить разрешение картинкам 800x600 .. с таким разрешением должны сниматься скриншоты.

Но проблема вот в чём,
Снимать то снимает, и с заданным разрешением изображения.
Но обрезает картинку.. если выставить 640x480 от скрина вообще ничего не остаётся..
это не радует.

Вот что использую:
Код:
procedure TMainForm.GetScreenBtnClick(Sender: TObject);
  var
    jp:TJPEGImage;
    bm:TBitmap;
    i:string;
begin
i:='1';
if SettingsForm.JPEGFormatFileChk.Checked then //выбран ли JPEG?
begin
bm:=TBitmap.Create;
bm.Width:=Screen.Width;
bm.Height:=Screen.Height;
if SettingsForm.ImgHeightWightChk.Checked then //Ограничен ли БитМап размерами?
begin
case SettingsForm.ImageSizeBox.ItemIndex of //проверяем какой выбран размер и выставляем соответствующий размер
0:
begin
bm.Width:=640;
bm.Height:=480;
end;
1:
begin
bm.Width:=800;
bm.Height:=600;
end;
2:
begin
bm.Width:=1024;
bm.Height:=768;
end;
3:
begin
bm.Width:=1280;
bm.Height:=1024;
end;
end;
end else //иначе размер экрана
begin
bm.Width:=Screen.Width;
bm.Height:=Screen.Height;
end;
BitBlt(bm.Canvas.Handle,0,0,bm.Width,bm.Height,GetDC(0),0,0, SRCCOPY); //делаем скрин
jp:=TJPEGImage.Create;
jp.Assign(bm);
jp.CompressionQuality:=SettingsForm.CompressionBar.Position; //степень сжатия
jp.Compress;
case SettingsForm.PixelFormatBox.ItemIndex of //Битность рисунка для JPEG
0: jp.PixelFormat:=jf24Bit;
1: jp.PixelFormat:=jf8Bit;
end;
jp.SaveToFile(SettingsForm.ScreenDirEdit.Text+IntToStr(StrToInt(SettingsForm.FileNameEdit.Text)+StrToInt(LabCount.Caption))+'.jpg'); 
jp.Free; //освобождаем память для след. рисунка.
bm.Free;
end;
...
Есть решение?
Человек_Борща вне форума Ответить с цитированием
Старый 29.04.2010, 22:25   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
StretchBlt(bm.Canvas.Handle,0,0,bm.Widht,bm.Height,GetDC(0),0,0,Screen.Width,Screen.Height,SRCCOPY);
вместо BitBlt попробуй.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 29.04.2010, 22:50   #3
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

О работает! Спасибо! Ставлю +
Человек_Борща вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
запуск макроса при изменении ячейки Бонни Microsoft Office Excel 2 26.04.2010 11:44
innerHTML при изменении st1512 HTML и CSS 0 07.09.2009 10:04
разрушение индексов при изменении таблицы bosston БД в Delphi 1 23.06.2009 08:22
Работа программы при изменении Rom1k06 Microsoft Office Excel 8 18.01.2009 19:05
как сделать так что при изменении разрешения экрана программа работала... Victor[famas] Общие вопросы Delphi 7 13.02.2008 12:48