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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.08.2016, 19:17   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,194
Вопрос Теряется качество картинки из BLOB

Добрый день!
При отображении картинки в поле из BLOB поля базы данных теряется качество картинки.
Вот код:
Код:
procedure TForm_Main.StudentsDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer;
  Column: TColumnEh; State: TGridDrawState);
var
  stream: TStream;
  img: TBitmap;
  t,r:integer;
begin
 if Column.FieldName='PS' then
 with Form_Main.Students.Canvas, Form_Main.pFIBDataSet1 Do
 begin
  img:= TBitmap.Create;
  stream:=
      Form_Main.pFIBDataSet1.CreateBlobStream(Form_Main.Students.DataSource.DataSet.FieldByName('PS'),bmRead);

  t:=TDBGridEh(Sender).Canvas.TextWidth(Column.Field.DisplayText);//длина отображаемого значе ния
  t:=TDBGridEh(Sender).Canvas.TextHeight(Column.Field.DisplayText);//длина отображаемого значе ния
  r:=Rect.Right - Rect.Left;//длина прямоугольника
  TDBGridEh(Sender).Canvas.TextOut(3 + Rect.Left+round((r-t)*0.5), 3 + Rect.Top+2,Column.Field.Text);
  try
   img.LoadFromStream(stream);
   StretchDraw(Rect, img);
  finally
   stream.Free;
   img.Free;
  end;
 end;
end;
Прошу помощи в том как сделать, чтобы не терялось качество картинки?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 15.08.2016, 13:45   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

А степень сжатия какая? StretchDraw вообще-то не самый хороший сжиматель изображения при сильном сжатии. Да и любым другим способом потеря качества неизбежна. Может GDI+ и поможет, но качество тоже прежним не останется. И Rect хоть пропорционален размерам битмапа?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 16.08.2016, 04:36   #3
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,194
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
А степень сжатия какая? StretchDraw вообще-то не самый хороший сжиматель изображения при сильном сжатии. Да и любым другим способом потеря качества неизбежна. Может GDI+ и поможет, но качество тоже прежним не останется. И Rect хоть пропорционален размерам битмапа?
Привет!
У меня в событии OnCreate формы есть этот код:
Код:
 pic:=Tjpegimage.Create;
 TJPEGImage(pic).Scale:=jsEighth;// уменьшаем картинку в 8 раз
 TJPEGImage(pic).Performance:=jpBestSpeed; // уменьшаем цветопередачу и увеличиваем скорость отрисовки
Но, он вроде остался от предыдущих вариантов и не влияет на тот код, который отображает картинку. По крайней мере если я комментирую его, то ничего не меняется в лучшую сторону.
У меня размер картинки-то 70(ш) на 80(в) всего лишь.
В коде размер Rect явно не задается, отсюда и потеря качества, наверное.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 16.08.2016, 07:28   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Выложи сюда одну картинку и покажи содержимое Rect-а
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 16.08.2016, 09:31   #5
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,194
Вопрос

Аватар, да картинка-то обычная.
А как посмотреть размер Rect?
Изображения
Тип файла: bmp 26soDaCPi90.bmp (15.9 Кб, 133 просмотров)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 16.08.2016, 10:11   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Ну картинка 65x83, а говоришь 70x80
А Rect в отладчике подглядеть - ставь точку останова на строке
Код:
StretchDraw(Rect, img);
наведи курсор на Rect во время останова и смотри. Неужели отладчиком не пользуешься?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Картинки на кнопках качество JunkieBeat C# (си шарп) 1 13.12.2014 14:10
component CnWaterImage - качество картинки ухудшилось beegl Общие вопросы Delphi 5 13.02.2014 08:58
как снизить программно качество подгруженной картинки Dezzit C# (си шарп) 3 07.05.2012 09:42
Добавление изображения в blob через sql. Blob пустой. athleet БД в Delphi 3 01.05.2012 06:41
картинки в BLOB полях Toxa БД в Delphi 1 23.04.2007 13:34