Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Ответ
 
Опции темы
Старый 12.06.2013, 00:50   #1
ramsesjol
Пользователь
 
Регистрация: 31.05.2013
Сообщений: 11
Репутация: 10
По умолчанию Изменение размера изображения

Такая тема: я загружаю через диалог картинку в TImage, если картинка больше чем image нужно размер картинки уменьшить и после всего этого праздника картинку записать в БД. Попробовал так:
Код:

if dlgOpenPic.Execute then begin
  img.Picture.LoadFromFile(dlgOpenPic.FileName);
  if (img.Picture.Height>img.Height) or
    (img.Picture.Width>img.Width) then begin
       bmp:=TBitmap.Create;
       bmp.Assign(img.Picture.Graphic);
       k:=Min(img.Width/img.Picture.Width,img.Height/img.Picture.Height);
       bmp.Width:=Floor(img.Picture.Width*k);
       bmp.Height:=Floor(img.Picture.Height*k);
       img.Picture.Graphic.Assign(bmp);
    end;
end;

Так вот он отлично расчитывает пропорции и меняет размер, НО само изображение не меняется вообще, т.е. кусок обрезается. Что не так?
ramsesjol вне форума   Ответить с цитированием
Старый 12.06.2013, 10:27   #2
Stilet
Белик Виталий :)
Профессионал
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Адрес: Украина, Донецкая область, г. Краматорск
Сообщений: 57,842
Репутация: 6832
По умолчанию

Цитата:
нужно размер картинки уменьшить
При записи в БД используй StretchDraw
Код:

if dlgOpenPic.Execute then begin
  img.Picture.LoadFromFile(dlgOpenPic.FileName);
  if (img.Picture.Height>img.Height) or
    (img.Picture.Width>img.Width) then begin
       bmp:=TBitmap.Create;
       bmp.Assign(img.Picture.Graphic);
       img.Picture.Bitmap.Canvas.StretchDraw(rect(0,0,img.Width,img.Height),bmp);
    end;
end;

Код не проверял.
__________________
I'm learning to live...
Stilet вне форума   Ответить с цитированием
Старый 12.06.2013, 13:41   #3
ramsesjol
Пользователь
 
Регистрация: 31.05.2013
Сообщений: 11
Репутация: 10
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
При записи в БД используй StretchDraw

Код не проверял.
Проверил. Сначала он рисовал уменьшенное изображение поверх исходного. Добавил очистку канваса. Но проблема осталась. Он менял размер изображения, но не холста. Зачем мне хранить в БД лишний груз если он эту картинку не сможет показывать в полном размере. Пришлось добавить еще одну битмаповую переменную и все получилось. Спасибо за идею . Жаль только что качество при этом очень сильно ухудшается.
Код:

 if (img.Picture.Height>img.Height) or
    (img.Picture.Width>img.Width) then begin
     bmp:=TBitmap.Create;
     bmp.Assign(img.Picture.Graphic);
     buf:=TBitmap.Create;
     buf.Assign(bmp);
     k:=Min(img.Width/img.Picture.Width,img.Height/img.Picture.Height);
     bmp.Width:=Floor(img.Picture.Width*k);
     bmp.Height:=Floor(img.Picture.Height*k);
     bmp.Canvas.FillRect(bmp.Canvas.ClipRect);
     bmp.Canvas.StretchDraw(Rect(0,0,bmp.Width,bmp.Height),buf);
     img.Picture.Graphic.Assign(bmp);
    end;

ramsesjol вне форума   Ответить с цитированием
Старый 12.06.2013, 14:36   #4
Stilet
Белик Виталий :)
Профессионал
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Адрес: Украина, Донецкая область, г. Краматорск
Сообщений: 57,842
Репутация: 6832
По умолчанию

Цитата:
Жаль только что качество при этом очень сильно ухудшается.
Ух ты... Як мед так и ложку?
Цитата:
Зачем мне хранить в БД лишний груз
А я бы на твоем месте не стеснялся. Впрочем я бы на твоем месте файлы картинок хранил не в БД а в репозитории каком-нить. Каталоге рядом с прогой к примеру. А в БД относительные пути к файлам в репозитории.

Кстати многие серьезные субд (Lotus к примеру) в своей БД не стесняются хранить файлы, и правильно делают.
Цитата:
Спасибо за идею .
Пожалуйста )
__________________
I'm learning to live...
Stilet вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменение размера изображения при вставке в лист Excel Pustota.a Microsoft Office Excel 1 14.02.2013 18:20
изменение размера изображения voron.kz Общие вопросы Delphi 2 06.09.2010 08:15
Качественное изменение размера изображения... Dr. MefistO Мультимедиа в Delphi 5 15.07.2009 17:22
Изменения размера изображения в Image BredoZavR Мультимедиа в Delphi 0 02.07.2009 13:30
Изменение размера изображения, Crop image to fit height & width loopy-need Общие вопросы Delphi 4 23.11.2006 11:23


04:32.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru