Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.12.2007, 20:01   #1
Cyn4uk
Пользователь
 
Регистрация: 25.11.2007
Сообщений: 56
По умолчанию DBImage + jpeg + gif

Вопрос №1

Если делаем dbi.Picture.LoadFromFile, то файл jpeg, выбранный через opendlg нивкакую не хочет писать в базу (в uses модуль jpeg подключен). С bmp файлами работает хорошо.

Вопрос №2

Как использовать gif файлы в том же самом случае? Модуля gif же нет.
Cyn4uk вне форума Ответить с цитированием
Старый 19.12.2007, 23:16   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Рассматривались такие темы:
ФОТО из Delphi в БД MySQL
jpeg
Изображения в БД
...
Перечислять дальше? Или, наконец, начнете сами заниматься поиском нужного материала на форуме? Почему этим должен заниматься кто-то другой? Только потому, что вам лень?
mihali4 вне форума Ответить с цитированием
Старый 20.12.2007, 09:04   #3
Alex21
With best regards
Участник клуба
 
Регистрация: 20.04.2007
Сообщений: 1,448
По умолчанию

не стесняемся использовать поиск:
http://www.programmersforum.ru/showthread.php?t=9091
http://programmersforum.ru/showthrea...highlight=jpeg
http://programmersforum.ru/showthrea...highlight=jpeg
http://programmersforum.ru/showthrea...highlight=jpeg
Alex21 вне форума Ответить с цитированием
Старый 20.12.2007, 09:56   #4
Cyn4uk
Пользователь
 
Регистрация: 25.11.2007
Сообщений: 56
По умолчанию

Да юзал, юзал я поиск, всегда сначала это делаю прежде чем тему создавать. Перечитал эти темы еще до создания этой, но что-то все равно ничего не выяснилось для меня =(
В том плане что деаю все как нужн овродибы, но jpeg все равно не пишет в базу.

И что насчет gif файлов?

Последний раз редактировалось Cyn4uk; 20.12.2007 в 09:59.
Cyn4uk вне форума Ответить с цитированием
Старый 20.12.2007, 10:21   #5
Domovoy
Форумчанин
 
Регистрация: 24.10.2007
Сообщений: 254
По умолчанию

Начнём с того что сначала не помешало б взглянуть на твоё творение.
Domovoy вне форума Ответить с цитированием
Старый 20.12.2007, 14:36   #6
bill
Форумчанин
 
Аватар для bill
 
Регистрация: 26.04.2007
Сообщений: 440
По умолчанию

Цитата:
Сообщение от Cyn4uk Посмотреть сообщение
И что насчет gif файлов?
Нужен сторонний компонент, умеющий открывать gif. Обычным модулем gifimage(его можно найти в интернете) не обойтись.
bill вне форума Ответить с цитированием
Старый 20.12.2007, 14:46   #7
Cyn4uk
Пользователь
 
Регистрация: 25.11.2007
Сообщений: 56
По умолчанию

Цитата:
Сообщение от bill Посмотреть сообщение
Нужен сторонний компонент, умеющий открывать gif. Обычным модулем gifimage(его можно найти в интернете) не обойтись.
Что будет проще: переделать около 500-700 изображений из gif в jpeg или найти, разобраться и установить все нужное по работе с gif?
Cyn4uk вне форума Ответить с цитированием
Старый 21.12.2007, 16:43   #8
bill
Форумчанин
 
Аватар для bill
 
Регистрация: 26.04.2007
Сообщений: 440
По умолчанию

Цитата:
Сообщение от Cyn4uk Посмотреть сообщение
Что будет проще: переделать около 500-700 изображений из gif в jpeg или найти, разобраться и установить все нужное по работе с gif?
Шутку оценил.
Кому как. Посмотри, может в библиотеке rxlib есть то что тебе нужно. Либо посмотри на www.torry.net (по памяти).
bill вне форума Ответить с цитированием
Старый 23.12.2007, 18:21   #9
Cyn4uk
Пользователь
 
Регистрация: 25.11.2007
Сообщений: 56
По умолчанию

Короче говоря, не стал я сейчас мучаться с этим, нет времени. Сделал так: просто храним графику в одной папочке при базе.

При создании новой записи в базе сохраняем путь до этого файла (используем opendlg). Подгружаем файл из пути в простой Image.

Элементарно просто и функционально.

Конечно на будущее все-таки придется разобраться с графикой в базе, но не сейчас =)
Cyn4uk вне форума Ответить с цитированием
Старый 23.12.2007, 19:23   #10
Cyn4uk
Пользователь
 
Регистрация: 25.11.2007
Сообщений: 56
По умолчанию

Кстати откопал еще вот такую инфу:

Ещё полезные примеры

Не забывайте писать: uses ..., jpeg.


Код:
function GetStreamImgType(Stream: TStream): TClass;
var
  StreamPos: int64;
  ImgSign: string;
begin
  StreamPos := Stream.Position;
  try
    //BMP если не определено
    Result := Graphics.TBitmap;
    //JPEG
    SetLength(ImgSign, 4);
    Stream.Seek(6, soFromCurrent);
    Stream.Read(ImgSign[1], 4);
    if (UpperCase(ImgSign) = 'JFIF') or (UpperCase(ImgSign) = 'EXIF') then
      Result := Jpeg.TJPEGImage;
    //WMF
    Stream.Position := StreamPos;
    SetLength(ImgSign, 4);
    Stream.Read(ImgSign[1],4);
    if ImgSign = #$D7#$CD#$C6#$9A then
      Result := Graphics.TMetafile;
  finally
    Stream.Position := StreamPos;
  end;
end;

//Создает нужный класс и загружает в него изображение из потока
procedure LoadProperImage(Stream: TStream; Picture: TPicture);
var
  Img: TGraphic;
  StreamPos: int64;
begin
  StreamPos := Stream.Position;
  Img := TGraphicClass(GetStreamImgType(Stream)).Create;
  try
    Stream.Position := StreamPos;
    Img.LoadFromStream(Stream);
    Picture.Graphic := Img;
  finally
    Img.Free;
  end;
end;

function LoadPictureFromBLOB(var APicture :TPicture; Field: TBlobField):boolean;
var
  Img: TGraphic;
  Stream: TMemoryStream;
  StreamPos : int64;
begin
  Result := false;

  if Field.IsNull then
  exit;

  Stream := TMemoryStream.Create;
  try
    Field.SaveToStream(Stream);
    Stream.Position := 0;
    StreamPos := Stream.Position;
    Img := TGraphicClass(GetStreamImgType(Stream)).Create;
    try
      Stream.Position := StreamPos;
      Img.LoadFromStream(Stream);
      APicture.Graphic := Img;
      Result := true;      
    finally
      Img.Free;
    end;

  finally
    Stream.Free;
  end;

end;

procedure SavePictureToBLOB(Picture: TPicture; Field: TBlobField);
var
  Stream: TStream;
begin
  if not (Field.DataSet.State in [dsEdit, dsInsert]) then
    Field.DataSet.Edit;
  Field.Clear;
  if Assigned(Picture.Graphic) then
    if not Picture.Graphic.Empty then
      begin
        Stream := TMemoryStream.Create;
        try
          Picture.Graphic.SaveToStream(Stream);
          Stream.Position := 0;
          Field.LoadFromStream(Stream);
        finally
          Stream.Free;
        end;
      end;
end;

Запись графического рисунка любого формата в базу данных в BLOB-поле

Код:
begin
var
Img: TImage;
MemStream: TMemoryStream;
begin
..............................
  DataSource.DataSet.Edit;
..............................
  Img := TImage.Create(nil);
  try
    Img.Picture.LoadFromFile(FileName);

    if Assigned(Img.Picture.Graphic) and (not Img.Picture.Graphic.Empty) then
    begin
      MemStream := TMemoryStream.Create;
      try
        Img.Picture.Graphic.SaveToStream(MemStream);
        MemStream.Position := 0;
        TBlobField(DataSource.DataSet.FieldByName('IMAGE')).LoadFromStream(MemStream);
      finally
        MemStream.Free;
      end;
    end;

  finally
    Img.Free;
  end;
..............................
  DataSource.DataSet.Post;
..............................
end;
Cyn4uk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Jpeg warmbabe Общие вопросы по Java, Java SE, Kotlin 2 26.02.2010 20:14
DBImage i Accsess Coda89 БД в Delphi 5 28.05.2008 20:15
Размер картинок DBImage Crookers Общие вопросы Delphi 1 12.05.2008 08:52
Связь ComboBox с DBImage и DBMemo gane4ka Помощь студентам 8 14.12.2007 17:52