begin process at 2012 02 11 16:43:50
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Delphi

 > 

Mutimédia

 > 

Image & Vidéo

 > 

optimisation affichage image bitmap en dynamique


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

optimisation affichage image bitmap en dynamique

lundi 26 juillet 2010 à 15:30:57 | optimisation affichage image bitmap en dynamique

juliens81


Bonjour,

Je fait un jeu de carte. Il fonctionne comme suit, un serveur reçoit les changements d'états des parties en cours et renvoi la partie modifiée, X clients affichent aux joueurs la partie telle que communiquée par le serveur.
Comme le client ne sait pas ou seront les cartes ni combien elles seront, j ai un tableau dynamique d image.

mon problème est le suivant, entre chaque "rafraichissement" de partie je dois attendre entre 1000 et 2500ms (ce qui fait pas vraiment temps réel)
j'ai vérifié au niveau du serveur, il ne met pas plus de 50ms secondes à répondre et au niveau du client pas plus de 200ms entre l'envoi et la réception de la requête. Ce qui place le ralentissement au niveau de l'affichage des images.

avez-vous une idée pour afficher rapidement un tableau d'images bitmap de manière dynamique?
pour le moment je charge les images au fur et à mesure qu'elles arrivent pour ne pas prendre trop de mémoire.
est ce que j'y gagnerais à toutes les charger au départ quitte à les rendre visible/invisible et à les déplacer si besoin est?

merci d avance
ps si vous avez besoin de précisions n'hésitez pas


lundi 26 juillet 2010 à 16:26:43 | Re : optimisation affichage image bitmap en dynamique

Francky23012301

Membre Club
Salut,

Ta question n'est pas clair en fait :

1)Utilises tu TCP ou UDP pour transférer tes données ? Pour un jeu en réseau, on utilise souvent UDP .

2)Tu parles d'images et de BitMap mais ce n'est pas la même chose. Don concrètement tu transfères quoi : des BitMap ou des TImages ?

3)Tu affiches tes images mais tu ne présises pas comment : tu utilises des TImages ?


Perso j'utiliserai un tableau de JPeg . Par contre ne surtout pas utiliser un tableau de TImages qui va méchamment allourdir le temps de téléchargement et d'affichage
lundi 26 juillet 2010 à 16:27:26 | Re : optimisation affichage image bitmap en dynamique

Bacterius

Membre Club
Salut,
moi ce que j'aurai fait, c'est que j'aurai fait en sorte que le serveur envoie tout d'abord un nombre, qui indique le nombre de cartes à recevoir. Quand le client lit ce nombre, il alloue juste la place nécessaire, lit une carte, traite, lit une autre carte, traite, ...

Pour ce qui est des cartes, moi je les chargerai toutes en mémoire dès le début du programme dans un tableau de bitmaps, et j'enverrai que le numéro des cartes sur le réseau, comme ça l'affichage est rapide (copie mémoire locale) et le trafic est bas.

Après, ça dépend de comment tu as conçu ton jeu. Es-tu passé directement par les sockets, ou as-tu utilisé une librairie réseau, genre Indy ?
Salut, dans ce cas, je ferais un tableau dynamique de taille maximale (il y a quand même une limite supérieure dans le nombre de cartes j'imagine)

Cordialement, Bacterius !

lundi 26 juillet 2010 à 16:29:12 | Re : optimisation affichage image bitmap en dynamique

Bacterius

Membre Club
Oups échec à la fin de mon post, ignorer les deux dernières lignes.

Salut Francky,
pourquoi pas des PNG ? Car les JPG pour des jeux de carte, ça va mettre des problèmes de couleur (le rouge est souvent beaucoup plus "rouge bordeaux"), et la compression sera meilleure en PNG. En transmettant non pas les images mais des numéros correspondant aux cartes. Mais bon, c'est une idée.

Cordialement, Bacterius !

lundi 26 juillet 2010 à 16:57:05 | Re : optimisation affichage image bitmap en dynamique

Francky23012301

Membre Club
Pourquoi pas des PNG car il me semble que le composant TImage ne gère pas ce format . Alors tu vas me dire qu'il y a des libs mais bon s'il peut éviter ce genre de chose c'est mieux.


Sinon effectivement, la façon de voir Juliens81 (Qui a pas mal floodé sur sa dernière question et risque de se faire disputer ) est à revoir. La meilleur des solutions serait la tienne, stratégiquement parlant (Bon après on peut améliorer le concept en créant des types et des records). Mais il est clair que de transférer des images, des bitmaps, des jpeg, des png est surement pas la bonne méthode pour avoir un truc optimisé.
lundi 26 juillet 2010 à 17:08:04 | Re : optimisation affichage image bitmap en dynamique

juliens81

re bonjour,


tout d abord merci pour toutes ces reponses.

c est vrai que je n ai pas ete tres clair par rapport aux images que j utilisent. elles sont deja sur la machine du client dans un repertoire a part. le probleme ne vient donc pas du telechargement.
J ai essayer de mettre des JPG a la place de mes BMP mais ca n accelere pas l affichage (j ai meme l impression que c est l inverse)
pour mon affichage je fais un strech sur mes images, est ce que ca peut poser probleme?

pour ce qui est du protocole de communication je fais des sockets

j espere avoir ete plus clair cette fois ci




lundi 26 juillet 2010 à 17:24:27 | Re : optimisation affichage image bitmap en dynamique

cirec

Membre Club Administrateur CodeS-SourceS
Salut,

donne nous ta procédure de chargement et d'affichage des images qu'on y voit plus clair ... parce que normalement ça ne devrait pas poser de problème

ps: et la taille initial des images et la taille après stretch



@+Cirec
lundi 26 juillet 2010 à 17:33:53 | Re : optimisation affichage image bitmap en dynamique

juliens81

la procedure de chargement en soit ne pose pas de probleme (j ai fait un log et en 200ms maximum mes donnees sont chargees)
pour la procedure d affichage d image la voici.

function creation_carte(cpt,identifiant_carte,hauteur,largeur:integer;position:Tpoint;lien_image:string):integer;
var temp,temp2:string;
begin
result:=0;
if cpt>nbcartes then begin
try
tabcartes[cpt]:=timage.Create(Form1);
tabcartes[cpt].Parent:=Form1;
// nbcartes:=cpt;
// nbcartes:=nbcartes+1;
inc(nbcartes);
except
result:=1;
end;
end;
tabcartes[cpt].Height:=hauteur;
tabcartes[cpt].Width:=largeur;
tabcartes[cpt].Stretch:=true;
if lien_image<>'' then begin
{if pos('.bmp',lien_image)>0 then begin
if fileexists(StringReplace(lien_image,'.bmp','.jpg',[rfReplaceAll, rfIgnoreCase])) then begin
lien_image:=StringReplace(lien_image,'.bmp','.jpg',[rfReplaceAll, rfIgnoreCase]);
end;
end;}
// si la carte est trop petite on charge une carte deja reduite pour accelerer l affichage
if hauteur<=150 then begin
temp:=lien_image;
temp2:='';
while pos('\',temp)>0 do begin
temp2:=copy(temp,1,pos('\',temp));
delete(temp,1,pos('\',temp));
end;
temp2:=temp2+'\mini\'+temp;
if fileexists(temp2) then
lien_image:=temp2;
end;
tabcartes[cpt].Picture.LoadFromFile(lien_image);
tabcartes[cpt].Visible:=true;
tabcartes[cpt].Enabled:=true;
end else begin
tabcartes[cpt].Visible:=false;
tabcartes[cpt].Enabled:=false;
end;
tabcartes[cpt].Left:=position.X;
tabcartes[cpt].top:=position.Y;
// tabcartes[cpt].Height:=235;
// tabcartes[cpt].Width:=161;
tabcartes[cpt].Tag:=identifiant_carte;
tabcartes[cpt].OnClick:=form1.Image1.OnClick;
tabcartes[cpt].OnDblClick:=form1.Image1.OnDblClick;
tabcartes[cpt].OnMouseMove:=form1.Image1.OnMouseMove;
end;

elle est appelle environ 40 fois et au maximum 90 fois (j ai fait en sorte de ne pas afficher les cartes qui se superpose.

pour la taille des images elles font 348x475 de base et dans le repertoire mini (les memes en reduites) elle font 144x200
lundi 26 juillet 2010 à 17:45:15 | Re : optimisation affichage image bitmap en dynamique

juliens81

je viens d essayer sur une autre machine et l affichage se fait correctement.
je vous remercie du temps que vous avez passez a m aider.

a une prochaine fois, pour une question que j espere plus pertinente.





Cette discussion est classée dans : dynamique, image, serveur, affichage, bitmap


Répondre à ce message

Sujets en rapport avec ce message

Convetir une imag en Bitmap [ par sebastienbro ] Je veux convertirune image en ICO, mais il me met une erreur : Image icône incorrectAidez moi !!!!! Affichage rapide d'image [ par zorg63 ] Désolé pour le tire qui n'est pas très clair, je ne savais pas comment résumer mon problème. Le voici :Je viens de poster une source utilisant l'affic Prob DLL des ressources bitmap [ par ahmed12 ] Je utilise une dll qui contient des bitmaps a pris avoir compiler une ressource.Et j'ai arrivé de charger ces bmp dans la l'application Hote avec ce Affichage d'image avec WebSnap [ par mourad_kharrat ] je travail actuellement sur un site web ou il m'est demander de charger des images a partir d'une base de données MsSql Server (champs de type image) Affichage d'un bitmap avec scrollbar [ par jmic ] Bonjour, Je cherche, depuis bien longtemps, le moyen d'afficher dans une fiche (qui contient d'autres choses) un fichier bitmap de grande taille, avec Copie d'une partie d'un image [ par Rapakooti ] Alors mon pb viens du fait que j'essaie de faire une applique skinnable et par soucis de facilite lors de la creation des futur skins , toutes les ima affichage dynamique des form ? [ par SaintAL ] salutj'utilise Delphi 6 pour faire une application de gestion commerciale. j'ai utilisé un module des donnée pour mettre tous les composants ADO utili Pb conversion image. [ par Becracker ] Salut les gars, Je suis entrain de faire un convertisseur d'image Bmp à Gif. J'ai mis le code suivant mais il ya une er Question sur les streams [ par Francky23012301 ] Salut à tous,J'ai besoin de faire une application qui utilise les flux malheureusement il n 'y pas grand chose sur le sujet :Voila j'ai un serveur et Image d'affichage d'un composant [ par Sloridan ] Salut, J'aimerais savoir comment on peut changer l'image d'affichage d'un composant (pas son icone). Mon composant hérite de TGraphicsControl, donc il


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 10,951 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales