Wczytywanie jpg z netu bezpośrednio do np tablicy jpegów.

0

Witam,
Chce sobie zaladowac ok 20 jpgow do tablicy jpgow i pozniej jakos je wyswietlac ale nie chce ich pobierac z dysku (bo tu nie ma problemu) ale z adresow http.
Czyli jest adres http://adres/katalog/plik1.jpg, http://adres/katalog/plik2.jpg itd..... i teraz chce aby te pliki mi wskakiwaly do tablicy jpgow z pominiecem zapisywania na dysk. I zeby w czasie pracy programu moc je szybko wykorzystac.

To moze inaczej :) Jak sciagnac plik przez http i bez zapisywania na dysk wrzucic go np dozmiennej timage albo bitmap albo cokolwiek innego ?

0
Glina napisał(a)

Witam,
Chce sobie zaladowac ok 20 jpgow do tablicy jpgow i pozniej jakos je wyswietlac ale nie chce ich pobierac z dysku (bo tu nie ma problemu) ale z adresow http.
Czyli jest adres http://adres/katalog/plik1.jpg, http://adres/katalog/plik2.jpg itd..... i teraz chce aby te pliki mi wskakiwaly do tablicy jpgow z pominiecem zapisywania na dysk. I zeby w czasie pracy programu moc je szybko wykorzystac.

To moze inaczej :) Jak sciagnac plik przez http i bez zapisywania na dysk wrzucic go np dozmiennej timage albo bitmap albo cokolwiek innego ?

Zastanów się troszkę nad tym postem. Jak możesz wykorzystać pliki *.jpg, które są gdzieś na serwerze? Chyba tylko wczytując je do WebBrowsera. Tak więc do tablicy wprowadć adresy interenetowe do swoich plików. A następnie wczytuj je kolejno do webbrowsera. Ale i tak one zostaną pobrane na dysk do katalogu TemporaryInternetFiles

0

Zastanów się troszkę nad tym postem. Jak możesz wykorzystać pliki *.jpg, które są gdzieś na serwerze?

Moge bo to sa moje pliki :-)

A jak mozna pobrac rozmiar pliku np http://serwer/katalog/plik ? zeby do tego zapodac progress-a, bo w mozna obsluzyc zdarzenie onprogresschange komponentu webbrowser ale to raczej nie to.

0
Glina napisał(a)

Zastanów się troszkę nad tym postem. Jak możesz wykorzystać pliki *.jpg, które są gdzieś na serwerze?

Moge bo to sa moje pliki :-)

A jak mozna pobrac rozmiar pliku np http://serwer/katalog/plik ? zeby do tego zapodac progress-a, bo w mozna obsluzyc zdarzenie onprogresschange komponentu webbrowser ale to raczej nie to.

function GetSize(WebBrowser : TWebBrowser) : Integer;
begin
Result:=StrToInt((WebBrowser.Document as IHTMLDocument2).FileSize);
end;

:-D

0

Nie lepiej by było skorzystac z TIdHTTP.Get(Url, Stream) ?

0
PiXel napisał(a)

Nie lepiej by było skorzystac z TIdHTTP.Get(Url, Stream) ?

I tak musi wczytać do webbrowsera te swoje pliki *.jpg bo nie chce je ładować z dysku. A wydaje mi się, że nie ma innej możliwości jak tylko załadować te pliki do np webbrowsera. Bo do komponentu TImage nie ma możliwości załadowania pliku z serwera.

0

Słyszałeś o czymś takim jak pamięc ram? Właściwośc Stream w funkcji Get może przechowac dowolne dane które da się wczytac w Image'a.

0
PiXel napisał(a)

Słyszałeś o czymś takim jak pamięc ram? Właściwośc Stream w funkcji Get może przechowac dowolne dane które da się wczytac w Image'a.

A moglbys zapodac pareliniej kody jak np zapodac pliczka do pamnieci a pozniej go wrzucic do Imaga ?
Plis :-)

Mam cos takiego:

procedure TForm5.Button2Click(Sender: TObject);
var
ms: TMemoryStream;
Image: TJPEGImage;
begin
ms := TMemoryStream.Create;
 Image := TJPEGImage.Create;
IdHTTP1.Get('http://serwer/lallaa.jpg',ms);
Image2.Picture.Graphic.LoadFromStream(ms);
end;

Zapisuje sie plik ale pusty, czemu ?

0

Pokombinowałem troche i skończyłem na tym:

var
  ms: TMemoryStream;
  Image: TJPEGImage;
begin
  ms := TMemoryStream.Create;
  Image := TJPEGImage.Create;
  http.Get('http://www.greecetravel.com/delphi/delphi2lg.JPG',ms);
  Image.LoadFromStream(ms);
  Image1.Picture.Graphic := Image; // Image1 jest klasy TImage
  ms.Free;
  Image.Free;
end;

Jednak zwraca błąd #41 czyli "Empty input file".

Oczywiście taki sposób działa dobrze więc wiadomo że w streamie są dane:

var
  ms: TMemoryStream;
begin
  ms := TMemoryStream.Create;
  http.Get('http://www.greecetravel.com/delphi/delphi2lg.JPG',ms);
  ms.SaveToFile('c:\test.jpeg');
  ms.Free;
end;
0

Trzeba bylo ustawić pozycje w strumieniu po ściągnięciu na 0 i już dziala :)

var
  ms: TMemoryStream;
  Image: TJPEGImage;
begin
  ms := TMemoryStream.Create;
  Image := TJPEGImage.Create;
  http.Get('http://www.greecetravel.com/delphi/delphi2lg.JPG',ms);
  ms.Position := 0;
  Image.LoadFromStream(ms);
  Image1.Picture.Graphic := Image; // Image1 jest klasy TImage
  ms.Free;
  Image.Free;
end;
0
Cool_Programming napisał(a)

Trzeba bylo ustawić pozycje w strumieniu po ściągnięciu na 0 i już dziala :)
Hmmm dawalem pozycje na 0 i nie dzialalo , moze cos pochrzanilem , dzieki sprawdze !

A co do ładowania tych jpgów do pamięciu to napoczatku wypadaloby sprawdzic chyba czy jest dostepna ilosc pamieci pozwalajaca na zaladowanie odpowiedniej ilosci jpgow ?

0

Ja do mojego sposobu dopisałem pozycje w streamie na 0 i działało.
Co do sprawdzania wolnej pamięci lepiej było by obsłużyc błąd w przypadku jej wyczerpania niż sprawdzac przed wczytaniem jpegów.

0

To może jeszcze jedna porada co do wczyttywania jpgow, bo po przeszukaniu roznych FAQ jak rowniez postów na tym forum stwierdzam ze ludziska jak i zarówno ja , pragną sie dowiedziec jak zapodac zdjecia do jakiegos listview, imagelist czy cos podobego.
Innymi slowy jak zrobic tabelke w ktorej w kazdym polu bedzie fotka.
W php to jest:

<table>//tabelka 2x2 w kazdym polu fotka
<tr><td><img src=a.jpg></td><td><img src=b.jpg></td></tr>
<tr><td><img src=c.jpg></td><td><img src=d.jpg></td></tr>
</table>

A jakim komponentem mozna zrobic to w delphi ? Bardzo prosilbym o przykład.
Dzieki z góry.

0

Nie wiem po co zakładałeś drugi temat
http://4programmers.net/Forum/viewtopic.php?id=91504

To wyskrobałem na szybko:

Na formie musi się znajdowac ListView i ImageList. Ustaw właściwośc ListView.LargeIcons na ImageList1.

var
  ms: TMemoryStream;
  jpg: TJPEGImage;
  bmp: TBitmap;
begin
  ms := TMemoryStream.Create;
  bmp := TBitmap.Create;
  jpg := TJPEGImage.Create;
  IdHTTP1.Get(Edit1.Text, ms);
  ms.Position := 0;
  jpg.LoadFromStream(ms);
  bmp.Width := jpg.Width;
  bmp.Height := jpg.Height;
  bmp.Canvas.Draw(0, 0, jpg);
  ImageList1.Add(bmp, nil);

  ListView1.Items.Add.ImageIndex := ImageList1.Count - 1;

  ms.Free;
  jpg.Free;
  bmp.Free;

end;

Minusem jest jednak to, że rozmiary wszystkich obrazków muszą byc stałe bo każda zmiana właściwości ImageList1.Width i Height kończy się wyczyszczeniem jej zawartości. Inną metodą byłoby ręczne rysowanie po jakiejś tabeli. Może pokombinuje z tym jutro.

0
PiXel napisał(a)

To wyskrobałem na szybko:

A gdzie ta fotka ma byc widoczne w listview ? bo mnie sie nigdzie nie pokazuje, tzn niby jest ale listview nie ma paskow przewijania jak na vsreport .
Naprawde taka banalna rzecz jest tak ciezko zrobic?

0

ListView ma byc ustawiona na vsIcons...

0
PiXel napisał(a)

ListView ma byc ustawiona na vsIcons...

Zrobilem tak jak napisales ale rysuje mi sie tylko taka mala kostka z obrazka , jak zrobic zeby zaladowac caly obrazek ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1