powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / UniGui Не загружается полностью изображение в image из потока
17 сообщений из 17, страница 1 из 1
UniGui Не загружается полностью изображение в image из потока
    #40017436
FIL23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрых суток,

В базе FB 2.5 в BLOB поле лежат фотографии.

Пытаюсь их получить в uniImage и что интересно, одна фотография полностью прогружается. А вот другие нет, чуть больше середины изображение загружается и все.

Получаю я их вот такой функцией передавая id поля где лежит изображение и image компонент в который надо вставить это изображение.


Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
function TUniMainModule.GetImageFromBase(perID:integer; perImage:TUniImage):boolean;
var
  perIBQuery:TIBQuery ;
  perTypeImage:integer;
  Stm:TStream;

begin
perIBQuery:=MyInitializationTIBQerySelect(perIBQuery); //
perIBQuery.Active:=false;
perIBQuery.SQL.Clear;
perIBQuery.SQL.Add(
                        'select * from USERS where ID =:perID'
                       );

if  perID = 0 then perIBQuery.ParamByName('perID').IsNull else  perIBQuery.ParamByName('perID').AsInteger:= perID;

  try
  perIBQuery.Active:=true;
  //perIBQuery.Last;
  Stm := perIBQuery.CreateBlobStream( perIBQuery.FieldByName('PHOTO'), bmRead);
  Except
  FreeAndNil(perIBQuery);
  FreeAndNil(Stm);
  end;

  try
  if Stm.Size > 0 then
    begin
    Stm.Position:=0;
//    perImage.Picture.Graphic.LoadFromStream(Stm);
    //perImage.Picture.Graphic:=TJPEGImage.Create;//TBitmap.Create;
    perImage.Picture.LoadFromStream(stm);
    end;
  finally
  FreeAndNil(perIBQuery);
  FreeAndNil(Stm);
  end;
end;



Как можно обойти эту проблему? Может как то , куда - то побитово считать ее а потом вставить? Может кто сталкивался с такой фитчей UniGui?
...
Рейтинг: 0 / 0
UniGui Не загружается полностью изображение в image из потока
    #40017440
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну чисто мое imho, не делай так, храни в базе только путь и имя файла на диске.
зачем тебе лишняя нагрузка на базу + база пухнет, бэкапы дольше делаются и восстанавливаются. А файлы можно спокойно перенести, разнести по разным накопителям и так далее. У меня по молодости и глупости была такая БД, данные 2 гига и еще 20 гигов сканов документов за 2 месяца, ну нафик.
...
Рейтинг: 0 / 0
UniGui Не загружается полностью изображение в image из потока
    #40017442
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FIL23
Код: pascal
1.
if  perID = 0 then perIBQuery.ParamByName('perID').IsNull 


Может вместо IsNull вызвать Clear?

А проще так:

FIL23
Код: pascal
1.
2.
3.
perIBQuery := MyInitializationTIBQerySelect(perIBQuery); //
perIBQuery.SQL.Text := 'select * from USERS where ID = :perID';
if  perID > 0 then perIBQuery.ParamByName('perID').AsInteger := perID;


В случае, если perID = 0 запрос можно вовсе не дергать.
...
Рейтинг: 0 / 0
UniGui Не загружается полностью изображение в image из потока
    #40017443
goldmi45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FIL23,

А в базе нормальные изображения, которые не загружаются в perImage?
Можно выгружать в файл, а из файла уже загружать в UniImage...
...
Рейтинг: 0 / 0
UniGui Не загружается полностью изображение в image из потока
    #40017459
FIL23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Путем проб выяснилось что фотографии какие то "не правильные" для данного компонента, в файл выгружаются нормально, и даже если из файла загрузить в компонент до компиляции , то полностью фотография загружается и видится в объекте в IDEЮ

Но если запустить программу , фотография так же становится на половину обрезанная.

Я открыл ее в пейнте , изменил немного и пересохранил. после этого она начала хорошо загружаться.

Т.е. получается где то стопорится считка фотографии . те где то есть ошибка в данных фотографии.
...
Рейтинг: 0 / 0
UniGui Не загружается полностью изображение в image из потока
    #40017469
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FIL23
Путем проб выяснилось что фотографии какие то "не правильные" для данного компонента, в файл выгружаются нормально, и даже если из файла загрузить в компонент до компиляции , то полностью фотография загружается и видится в объекте в IDEЮ

Но если запустить программу , фотография так же становится на половину обрезанная.

Я открыл ее в пейнте , изменил немного и пересохранил. после этого она начала хорошо загружаться.

Т.е. получается где то стопорится считка фотографии . те где то есть ошибка в данных фотографии.

Ага, для пэинта ошибок нет, а для компонента - есть. С чего ты решил, что "ошибки" в фотках, а не в твоём компоненте?
...
Рейтинг: 0 / 0
UniGui Не загружается полностью изображение в image из потока
    #40017470
FIL23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
причина ясна, я не правильно передавал данные в поток для записи в blob поле.

Сейчас новую тему создам :)
...
Рейтинг: 0 / 0
UniGui Не загружается полностью изображение в image из потока
    #40017522
FIL23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя продолжу тут.

Значит пытаюсь вытащить фотографию из LDAP.

таким вот способомо.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
  try
  NewADOQuery:=TADOQuery.Create(nil); //запрос на фото
    with NewADOQuery do
    begin
      SQL.Text := 'select thumbnailPhoto from ''LDAP://'+EditDomainName.Text+''' where DisplayName='''+perFIO+'''';
      //SQL.Text := 'select jpegPhoto from ''LDAP://'+EditDomainName.Text+''' where DisplayName='''+perFIO+'''';
      Connection:=NewADOConnection;
    end;
  NewADOQuery.Open;
  except
  MemoLog.Lines.Add('Ошибка запроса в AD для поиска фотографии по ФИО пользователя')
  end;

if not NewADOQuery.IsEmpty then       //если есть, то показываем
  begin
  Stm := TMemoryStream.Create;
  v:=NewADOQuery.FieldByName('thumbnailPhoto').value;

  Stm.Position:= 0;
  p := VarArrayLock(v);
  Stm.Write(p^, VarArrayHighBound(v, 1));
  VarArrayUnlock(v);

  Stm.Position:= 0;
  Image1.Picture.LoadFromStream(stm);
  end;



И фотография попадает в Image все ок.

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

Я уже смотрю на вариант может как-то конвертировать изображение для начала.
...
Рейтинг: 0 / 0
UniGui Не загружается полностью изображение в image из потока
    #40017530
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
UniGui Не загружается полностью изображение в image из потока
    #40017648
FIL23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Короче решение такое для этого unigui конвертировать изображение в bmp


Ниже приведу код: из запроса беру фотографию - вгоняю ее в поток, потом из этого потока в jpeg ....jpeg конвертирую в bmp , bmp в поток - из потока в БД. ППЦ одним словом...

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
if not NewADOQuery.IsEmpty then       //если есть, то показываем
  begin
  Stm:=VariantToStram(NewADOQuery.FieldByName('thumbnailPhoto').value)  ;               //преобразовываем фотографию из АД в поток

  Stm.Position:= 0;

  jpeg := TJPEGImage.Create;  //конвертируем из jpeg в bpm
  try
    jpeg.CompressionQuality := 100 ; {Default Value}
    jpeg.LoadFromStream(stm);
    bmp := TBitmap.Create;
    try
      Stm.Free;
      Stm:=TMemoryStream.Create;
      Stm.Position:= 0;
      bmp.Assign(jpeg);
      bmp.SaveToStream(Stm);
    finally
      bmp.Free;
    end;
  finally
    jpeg.Free;
  end;


  perIBQuery:=MyInitializationTIBQeryInsert(perIBQuery); //
  perIBQuery.Active:=false;
  perIBQuery.SQL.Clear;
  perIBQuery.SQL.Add('update USERS '
                    +' set '
                    +'PHOTO = :perPHOTO '
                    +'where ID = :perID'
                    );
  if  perID = 0 then perIBQuery.ParamByName('perID').IsNull else  perIBQuery.ParamByName('perID').AsInteger:= perID;

    try
    Stm.Position:=0;                                                              //
    perIBQuery.ParamByName('perPHOTO').LoadFromStream( Stm, ftBlob);             //
    perIBQuery.ExecSQL;
    IBTransactionComm.Commit;
    except
    MemoLog.Lines.Add('Ошибка добавления фотографии из AD в БД')
    end;

  FreeAndNil(perIBQuery); //
  NewADOQuery.Close;
  FreeAndNil(NewADOConnection);
  FreeAndNil(Stm);
  end;




Как достаю фотку если кому понадобится

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
function TUniMainModule.GetImageFromBase(perID:integer; perImage:TUniImage):boolean;
var
  perIBQuery:TIBQuery ;
  perTypeImage:integer;
  Stm:TStream;

begin
perIBQuery:=MyInitializationTIBQerySelect(perIBQuery); //
perIBQuery.Active:=false;
perIBQuery.SQL.Clear;
perIBQuery.SQL.Add(
                        'select * from USERS where ID =:perID'
                       );

if  perID = 0 then perIBQuery.ParamByName('perID').IsNull else  perIBQuery.ParamByName('perID').AsInteger:= perID;

  try
  perIBQuery.Active:=true;
  //perIBQuery.Last;
  Stm := perIBQuery.CreateBlobStream( perIBQuery.FieldByName('PHOTO'), bmRead);
  Except
  FreeAndNil(perIBQuery);
  FreeAndNil(Stm);
  end;



  try
  if Stm.Size > 0 then
    begin
    Stm.Position:=0;
//    perImage.Picture.Graphic.LoadFromStream(Stm);
    //perImage.Picture.Graphic:=TJPEGImage.Create;//TBitmap.Create;
    perImage.Picture.Bitmap.LoadFromStream(stm);
    end;
  finally
  FreeAndNil(perIBQuery);
  FreeAndNil(Stm);
  end;
end;
...
Рейтинг: 0 / 0
UniGui Не загружается полностью изображение в image из потока
    #40017665
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
вот тут откровенная глупость написана
Код: pascal
1.
2.
3.
4.
5.
perIBQuery.SQL.Add(
                        'select * from USERS where ID =:perID'
                       );

if  perID = 0 then perIBQuery.ParamByName('perID').IsNull



что вытащится из базы в случае PerID = 0 ?
(это я уже не говорю про IsNull - это функция, которая показывает, Null ли значение, или нет
В твоём случае нужен .Clear

Но всё равно глупость, особенно, если посмотреть, что там дальше в коде ты настряпал)
...
Рейтинг: 0 / 0
UniGui Не загружается полностью изображение в image из потока
    #40017694
FIL23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator


Но всё равно глупость, особенно, если посмотреть, что там дальше в коде ты настряпал)


Конечно там трешь ))) я же системный администратор , а не программист.
...
Рейтинг: 0 / 0
UniGui Не загружается полностью изображение в image из потока
    #40017697
Gluck99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Автор, у вас там случайно devexpress компоненты не установлены?
...
Рейтинг: 0 / 0
UniGui Не загружается полностью изображение в image из потока
    #40017704
FIL23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluck99,

Нет
...
Рейтинг: 0 / 0
UniGui Не загружается полностью изображение в image из потока
    #40017805
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Храни картинки на диске, а в uniImage подставляй путь, там спец. свойство есть - URL.
...
Рейтинг: 0 / 0
UniGui Не загружается полностью изображение в image из потока
    #40017832
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему никто автору не скажет, что нет никакой магии и что метод LoadFromFile определяет формат файла на основе расширения, а для LoadFromStream такая информация недоступна?

Достаточно написать такой код
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
var
  LGraphicClass: TGraphicClass;
  LGraphic: TGraphic;
begin
  LGraphicClass := DetectGraphicClass(...);
  if LGraphicClass = nil then
    raise Exception.Create('Unknown format');
  LGraphic := LGraphicClass.Create;
  try
    LGraphic.LoadFromStream(Strm);
    perImage.Picture.Assign(LGraphic);
  finally
    LGraphic.Free;
  end;
end;
...
Рейтинг: 0 / 0
UniGui Не загружается полностью изображение в image из потока
    #40017838
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему никто?
Ты сказал
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / UniGui Не загружается полностью изображение в image из потока
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]