Страница 1 из 1

the image format is unknown

Добавлено: Сб мар 02, 2019 2:54 pm
jurist23rus
Как побороть?

screen2.png
screen2.png (3.15 КБ) 510 просмотров


IMAGE.ZIP
(44.33 КБ) 24 скачивания

Re: the image format is unknown

Добавлено: Сб мар 02, 2019 6:34 pm
Гocть

Код: Выделить всё

procedure LoadAndShowImage (Sender: TObject);
var
  http: THttpClient;
  url: string;
begin
 // url := 'http://dataexpress.wiki/_media/wiki:logo.png';
 url := 'https://ruseller.com/lessons/les160/rotate_image/rotate.php';
  http := THttpClient.Create;
  try
    with http do
    begin
      ContentStream := TmemoryStream.Create;
      Send ('GET', url);
if Assigned (ContentStream) then
begin
ContentStream.Position:=0;
dxImage1.LoadFromStream(ContentStream);
dxImage1.Refresh;
end;
    end;
  finally
   http.Free;
  end;
end;


Зачем?:

Код: Выделить всё

if Assigned(Http.ContentStream) then
Http.ContentStream.Free;

если следом идет:

Код: Выделить всё

http.Free;

Re: the image format is unknown

Добавлено: Сб мар 02, 2019 6:47 pm
jurist23rus
Откуда же я знаю уничтожается ли ContentStream или нет, вот и престраховываюсь.

Re: the image format is unknown

Добавлено: Сб мар 02, 2019 6:51 pm
Гocть
jurist23rus писал(а):Откуда же я знаю уничтожается ли ContentStream или нет, вот и престраховываюсь.

Так можно же и автора спросить. У него вроде были исходники ;)

На крайний случай:
1. Смотрите диспетчер задач.
2. Находите в интернете картинку весом в 5-10 мб.
3. Многократно загружаете без уничтожения ContentStream.
4. Смотрите диспетчер задач.

Re: the image format is unknown

Добавлено: Сб мар 02, 2019 6:58 pm
jurist23rus
Я до конца не понимаю реализацию этого класса. Почему ContentStream не создаётся автоматически при создании экземпляра класса? Зачем это отдавать на откуп пользователю? Отсюда и непонимание нужно ли его уничтожать.

Re: the image format is unknown

Добавлено: Сб мар 02, 2019 7:53 pm
admin
ContentStream не уничтожается автоматически. Почему не создается автоматически? А какой создавать: TMemoryStream, TStringStream, TFileStream? Пусть лучше об этом думает разработчик, исходя из задачи.
jurist23rus писал(а):Как побороть?
ContentStream.Position в 0 поставьте.

Re: the image format is unknown

Добавлено: Сб мар 02, 2019 8:47 pm
jurist23rus
admin писал(а):А какой создавать: TMemoryStream, TStringStream, TFileStream?

Думаю общего для всех предка TStream. А остальное, действительно дело разработчика, если ему нужен потомок, то пусть сам его объявляет и создаёт.

Вы не подумайте, что я критикую вашу реализацию, она вполне удачная, просто мне всегда казалось, что класс должен сам управлять своими объектами, а пользователь своими, иначе, когда я сам создаю объект в чужом классе возникает путаница с тем кто же его уничтожит. Хотя я понимаю общее правило - сам создал объект, сам заботься о его уничтожении, что я, вообщем, всегда и делал.

Re: the image format is unknown

Добавлено: Сб мар 02, 2019 9:06 pm
admin
Создавать TStream нет смысла, он абстрактный. ContentStream создавать необязательно, используйте свойство Content.

Re: the image format is unknown

Добавлено: Сб мар 02, 2019 9:42 pm
Гocть
admin писал(а):ContentStream создавать необязательно, используйте свойство Content

Разве в конкретном примере это применимо? (Загрузка изображения в память и выдача из памяти в TdxImage)

Re: the image format is unknown

Добавлено: Вс мар 03, 2019 5:04 pm
admin
Гocть писал(а):
admin писал(а):ContentStream создавать необязательно, используйте свойство Content

Разве в конкретном примере это применимо? (Загрузка изображения в память и выдача из памяти в TdxImage)

Это так к слову. Вообще можно и через Content, создав TStringStream, но смысла нет особого.