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