Miten jpeg -formaattissa olevan kuvan saisi latautumaan nopeammin image -komponentissa? Kun sen latautuminen kestää jotain sekunnin ja sitten kun kuvan tuo näytölle myöhemmin ohjelman ajon aikana niin sen latautuminen ei kestä ollenkaan.
Olikohan tuo tarpeeksi selkeä
Jpeg-kuva on tiukkaan pakkattua dataa joten on ymmärrettävää että sen lataaminen ei ole erityisen nopeaa. Miksi haluat ladata sen nopeammin?
Ihan pelin nopeuden takia. Tympäsee kun kuvien latautuminen kestää ja sitten kun on vielä paljon kuvia.
Yleensähän pelit lataavat "Loading"-ruudun kera tarpeelliset grafiikat etukäteen. Sitä paitsi Image-komponentit eivät todellakaan ole se tehokkain tapa tehdä pelejä (jos kyse ei ole lautapelistä ;-)
Kyse on lähinnä taustakuvista jotka on jotain 1024x768. En ole vielä ideoinut pelin 'interaktiivista' grafiikkaa.
Kyllähän grafiikka ladataan jossain vaiheessa mutta sitä kun en tiedä miten. Tähän asti jpeg -kuvat latautuvat vasta kun ne tuodaan ruutuun. Ehkä jos ne määrittää ajon aikana image1.picture := 'blabla'. Pitää kokeilla mutta se vielä että voiko kuvia sijoittaa .res tiedostoihin tai yleensä piilottaa jotenkin?
lainaus:
Kyllähän grafiikka ladataan jossain vaiheessa mutta sitä kun en tiedä miten. Tähän asti jpeg -kuvat latautuvat vasta kun ne tuodaan ruutuun. Ehkä jos ne määrittää ajon aikana image1.picture := 'blabla'.
Voit tehdä globaalin muuttuja tyyppiä TPicture johon etukäteen lataat kuvan.
uses Jpeg ... var Kuva: TPicture; ... procedure TForm1.FormCreate(Sender: TObject); begin Kuva := TPicture.Create; Kuva.LoadFromFile('kuva.jpg'); end; procedure TForm1.FormDestroy(Sender: TObject); begin Kuva.Free; end; procedure Piirra; begin Form1.Canvas.Draw(10,10,Kuva); //Piirtää kuvan kohtaan 10,10 suoraan Formille; Image1.Picture.Assign(Kuva); //Sijoittaa kuvan TImage komponenttiin end;
edit: Korjasin koodia
Valitettavasti tuo ei nopeuta latautumista. Yksi vaihtoehto on että sijoitan jpeg -kuvan sisältävän formin mainformin taakse joten kuva saa latautua siellä rauhassa, tai yksinkertaisesti vaihdan bitmappeihin.
Aihe on jo aika vanha, joten et voi enää vastata siihen.