![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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; |