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

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

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

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

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

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

Такая тема: я загружаю через диалог картинку в 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,792
По умолчанию

Цитата:
нужно размер картинки уменьшить
При записи в БД используй 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
По умолчанию

Цитата:
Сообщение от 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,792
По умолчанию

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

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


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменение размера изображения при вставке в лист 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 10:23