Телефон: +7 (926) 245-03-63

Загрузка изображений в поля BLOB

Следующая статья: Вращение изображения.

Как загрузить изображение в BLOB-поле?

Имеется несколько способов загрузки изображения в BLOB-поле таблицы dBASE или Paradox. Перечислим три самых простых метода:

  • копирование данных из буфера обмена Windows в компонент TDBImage, связанный с полем BLOB;
  • применение метода LoadFromFile компонента TBlobField;
  • использование метода Assign для копирования объекта типа TBitmap в значение свойства Picture компонента TBDBImage.

Первый способ, в соответствии с которым происходит копирование изображения из буфера обмена, наиболее удобен, если требуется добавить изображение в таблицу, и с приложением работает конечный пользователь. В этом случае компонент TDBImage выступает в роли интерфейса между BLOB-полем таблицы и изображением, хранящимся в буфере обмена. Метод PasteFromClipboard компонента TDBImage как раз и занимается тем, что копирует изображение из буфера обмена в TDBImage. При сохранении записи изображение записывается в BLOB-поле таблицы.

Поскольку буфер обмена Windows может содержать данные различных форматов, то желательно перед вызовом метода CopyFromClipboard осуществлять проверку формата хранящихся в нем данных. Для этого необходимо создать объект TClipboard и использовать его метод HasFormat, позволяющий определить формат хранящихся в буфере данных. Имейте в виду, что для создания объекта TClipboard необходимо добавить модуль Clipbrd в секцию uses того модуля, в котором будет создаваться экземпляр объекта.

Вот исходный код примера, копирующий содержание буфера обмена в компонент TDBImage, если содержащиеся в буфере данные имеют формат изображения:

procedure TForm1.Button1Click(Sender: TObject);
 var C: TClipboard;
 begin
 C:=TClipboard.Create;
 try
 if Clipboard.HasFormat(CF_BITMAP) then DBImage1.PasteFromClipboard
 else ShowMessage('Буфер обмена не содержит изображения!');
 finally
 C.Free;
 end;
 end;

Второй способ заполнения BLOB-поля заключается в загрузке изображения непосредственно из файла. Данный способ одинаково хорош как при создании приложения (формирование данных), так и при его использовании.

Этот способ использует метод LoadFromFile компонента TBlobField, который применяется в Delphi для работы с dBASE-таблицами и двоичными Windows-полями или таблицами Paradox и графическими Windows-полями; в обоих случаях с помощью данного метода можно загрузить изображение и сохранить его в таблице.

Методу LoadFromFile компонента TBlobField необходим единственный параметр типа String: имя загружаемого файла с изображением. Значение данного параметра может быть получено при выборе файла пользователем с помощью компонента TOpenDialog и его свойства name_.

Пример, демонстрирующий работу метода LoadFromFile компонента TBlobField с именем Table1Bitmap (поле с именем Bitmap связано с таблицей TTable, которой присвоено имя Table1):

procedure TForm1.Button2Click(Sender: TObject);
begin
 Table1Bitmap.LoadFromFile('c:\delphi\images\splash\16color\construc.bmp');
end;

Третий способ для копирования содержимого объекта типа TBitmap в свойство Picture компонента TDBImage использует метод Assign. Объект типа TBitmap может быть как свойством Bitmap свойства объекта Picture компонента TImage, так и отдельного объекта TBitmap. Как и в методе, копирующем данные из буфера обмена в компонент TDBImage, данные изображения компонента TDBImage сохраняются в BLOB-поле после успешного сохранения записи.

Ниже приведен пример, в котором задействован метод Assign. В нашем случае используется отдельный объект TBitmap. Для помещения изображения в компонент TBitmap был вызван его метод LoadFromFile.

 procedure TForm1.Button3Click(Sender: TObject);
 var B: TBitmap;
 begin
 B:=TBitmap.Create;
 try
 B.LoadFromFile('c:\delphi\images\splashh\16color\athena.bmp');
 DBImage1.Picture.Assign(B);
 finally
 B.Free;
 end;
 end;
Интересное в интернете: Стильные профессиональные кофемашины Jura по низким ценам с доставкой в Барнаул.