Доброе время суток форумчане,
Есть БД и форма на которой находится компоненты 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» (из БД), размеры картинки остались такими, как и до ее изменения.
В чем может быть ошибка?
Спасибо за ответ