|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Не получается сохранить рисунок в БД с его измененными размерами
Доброе время суток форумчане,
Есть БД и форма на которой находится компоненты TMyDBImage (просматривает рисунки из БД) и TImage (таким же размером, как и TMyDBImage) ит.д. Мне нужно перед сохранением картинки в БД, подогнать ее размеры под TMyDBImage. Для этого я загружаю картинку сначало в TImage, сразу же подгоняю ее размеры под необходимые. Далее с помощью потока перезаписываю ее в поле типа ”blob”, все замечательно. Код:
procedure TFMain.Button2Click(Sender: TObject); var Pic: TPicture; k: Real; r1, r2: TRect; qq: TMemoryStream; begin if OpenPictureDialog1.Execute then begin Pic := TPicture.Create; with Image1.Picture.Bitmap do try Pic.LoadFromFile (OpenPictureDialog1.FileName); Assign (Pic.Graphic); Pic.Free; k := Max (Height/Image1.Height, Width/Image1.Width); r1 := Rect (0, 0, Width, Height); r2 := Rect (0, 0, Round (Width / k), Round (Height / k)); SetStretchBltMode (Canvas.Handle, HALFTONE); if k < 1 then begin Width := r2.Right; Height := r2.Bottom; StretchBlt (Image1.Picture.Bitmap.Canvas.Handle, 0, 0, r2.Right, r2.Bottom, Canvas.Handle, 0, 0, r1.Right, r1.Bottom, SRCCOPY); qq := TMemoryStream.Create; qq.Position := 0; TBlobField(ibdsFeatures.FieldByName('VOICE_IMAGE')).LoadFromStream(qq); end else begin StretchBlt (Image1.Picture.Bitmap.Canvas.Handle, 0, 0, r2.Right, r2.Bottom, Canvas.Handle, 0, 0, r1.Right, r1.Bottom, SRCCOPY); qq := TMemoryStream.Create; Image1.Picture.Bitmap.SaveToStream(qq); qq.Position := 0; TBlobField(ibdsFeatures.FieldByName('VOICE_IMAGE')).LoadFromStream(qq); Width := r2.Right; Height := r2.Bottom; end; except on E: EInvalidGraphic do ShowMessage('Ошибка загрузки'); on E: EConvertError do ShowMessage('Ошибка конвертирования'); else ShowMessage('Прочие ошибки: ' + #13 + Exception(ExceptObject).Message); end; end; end; Но при последующем просмотре картинки в «TMyDBImage» (из БД), размеры картинки остались такими, как и до ее изменения. В чем может быть ошибка? Спасибо за ответ Последний раз редактировалось Konstantin-78, 08.10.2017 в 17:33. |
#2
|
||||
|
||||
Видимо ещё нужно post у ibdsFeatures вызвать после заполнения поля
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#3
|
|||
|
|||
Цитата:
У меня потом "TMyDBImage" (из БД) отображает картинку в базовых (не измененных) размерах У меня в БД, почему-то картинка с НЕизмененным размером, хотя по идее я в поле пишу уже картинку с новыми размерами Я это проверяю таким способом Код:
qq := TMemoryStream.Create; Image1.Picture.Bitmap.SaveToStream(qq); qq.Position := 0; Image2.Picture.Bitmap.LoadFromStream(qq); qq.Position := 0; TBlobField(ibdsFeatures.FieldByName('VOICE_IMAGE')).LoadFromStream(qq); перед вставкой в БД, беру и просто поток пишу в "Image2" и в "Image2" картинка отображается корректно Последний раз редактировалось Konstantin-78, 08.10.2017 в 18:42. |
#4
|
||||
|
||||
Жалко, не могу проверить ваш вариант на сборке, нету некоторых компонентов, но вот пример из drkb, немного там по-другому идёт загрузка
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
Konstantin-78 (08.10.2017)
|
#5
|
|||
|
|||
спасибо разобрался,
просто строку: Код:
TBlobField(ibdsFeatures.FieldByName('VOICE_IMAGE')).LoadFromStream(LImage); Код:
Width := r2.Right; Height := r2.Bottom; |