Показать сообщение отдельно
  #1  
Старый 08.10.2017, 15:18
Konstantin-78 Konstantin-78 вне форума
Новичок
 
Регистрация: 27.04.2015
Сообщения: 76
Версия Delphi: Delphi7
Репутация: 10
По умолчанию Не получается сохранить рисунок в БД с его измененными размерами

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

В чем может быть ошибка?

Спасибо за ответ
Ответить с цитированием