Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / UniGui Не загружается полностью изображение в image из потока / 17 сообщений из 17, страница 1 из 1
12.11.2020, 10:15
    #40017436
FIL23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UniGui Не загружается полностью изображение в image из потока
Добрых суток,

В базе 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
12.11.2020, 10:31
    #40017440
энди
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UniGui Не загружается полностью изображение в image из потока
ну чисто мое imho, не делай так, храни в базе только путь и имя файла на диске.
зачем тебе лишняя нагрузка на базу + база пухнет, бэкапы дольше делаются и восстанавливаются. А файлы можно спокойно перенести, разнести по разным накопителям и так далее. У меня по молодости и глупости была такая БД, данные 2 гига и еще 20 гигов сканов документов за 2 месяца, ну нафик.
...
Рейтинг: 0 / 0
12.11.2020, 10:48
    #40017442
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UniGui Не загружается полностью изображение в image из потока
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
12.11.2020, 10:50
    #40017443
goldmi45
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UniGui Не загружается полностью изображение в image из потока
FIL23,

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

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

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

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

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

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

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

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

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

Значит пытаюсь вытащить фотографию из 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
12.11.2020, 14:57
    #40017530
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UniGui Не загружается полностью изображение в image из потока
...
Рейтинг: 0 / 0
12.11.2020, 17:47
    #40017648
FIL23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UniGui Не загружается полностью изображение в image из потока
Короче решение такое для этого 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
12.11.2020, 18:24
    #40017665
defecator
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UniGui Не загружается полностью изображение в image из потока
вот тут откровенная глупость написана
Код: 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
12.11.2020, 19:32
    #40017694
FIL23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UniGui Не загружается полностью изображение в image из потока
defecator


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


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

Нет
...
Рейтинг: 0 / 0
13.11.2020, 09:38
    #40017805
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UniGui Не загружается полностью изображение в image из потока
Храни картинки на диске, а в uniImage подставляй путь, там спец. свойство есть - URL.
...
Рейтинг: 0 / 0
13.11.2020, 11:02
    #40017832
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UniGui Не загружается полностью изображение в image из потока
Почему никто автору не скажет, что нет никакой магии и что метод 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
13.11.2020, 11:12
    #40017838
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UniGui Не загружается полностью изображение в image из потока
Почему никто?
Ты сказал
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / UniGui Не загружается полностью изображение в image из потока / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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