IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Lazarus Pascal Discussion :

Lenteur du chargement d'un TBitmap


Sujet :

Lazarus Pascal

  1. #21
    Futur Membre du Club
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Octobre 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Octobre 2015
    Messages : 15
    Points : 5
    Points
    5
    Par défaut
    Bonjour,
    moi je suis concentré sur la phase 2 vu que mon programme original a un Stream comme entrée et je dois le faire apparaitre dans une Timage et j'ai juste donné un exemple dans ce forum pour que tout le monde puisse tester. Donc en réalité charger un Stream dans une TImage ça me coute 700 ms et c'est cette partie que je voudrais optimiser .

    Citation Envoyé par BeanzMaster Voir le message
    Une chose que je ne saisis pas pourquoi utiliser un Stream et TBitmap supplémentaire (qui ne servent à rien, ici dans ton exemple), si c'est juste pour afficher ton image dans un TImage ?

  2. #22
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 301
    Points
    11 301
    Billets dans le blog
    6
    Par défaut
    Serait-il envisageable de threader le chargement pour gommer cette latence ?
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  3. #23
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par tourlourou Voir le message
    Salut Jipété !
    As-tu passé le bitmap dans un de tes décodeurs d'en-tête pour voir si spécificité ?
    Pas de spécificités particulières c'est un BMP v1 au format 32bits BGRA

    Citation Envoyé par tourlourou Voir le message
    Serait-il envisageable de threader le chargement pour gommer cette latence ?
    Cela ne changera rien et il faudrait écrire sa propre méthode de chargement

    Citation Envoyé par matrix1233 Voir le message
    Bonjour,
    moi je suis concentré sur la phase 2 vu que mon programme original a un Stream comme entrée et je dois le faire apparaitre dans une Timage et j'ai juste donné un exemple dans ce forum pour que tout le monde puisse tester. Donc en réalité charger un Stream dans une TImage ça me coute 700 ms et c'est cette partie que je voudrais optimiser .
    Quel est le format de ton stream se sont des données brute ou il y a tout ton fichier avec en-tête et tout le bazar ?. Je ne comprend toujours pas ce que tu souhaites faire. Avec ton stream tu fais quoi avant ?

    Pourquoi dans la "phase 2" tu passes par un TBitmap secondaire qui sert toujours à rien ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        FBitmap.LoadFromStream(M);
        Image1.Picture.Assign(FBitmap);
    Au lieu de simplement faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Image1.Picture.LoadFromStream(M);
    Assign prend énormément de temps machine

    Si ton Stream "M" est au format Windows BMP tu peux utiliser

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Image1.Picture.LoadFromStreamWithFileExt(M, 'bmp');
    Ce qui évitera de vérifier le format du stream et chargera ton image contenu dans le stream un peu plus rapidement.

    Sans plus d'explication et de comment tu as codé ton appli. Dur de t'aider à optimiser ton code. Et comme je l'ai déja dit le TBitmap natif n'est pas un foudre de guerre et n'est pas comparable à celui de Delphi. Beaucoup de choses sont différentes dans la gestion des images entre l'un et l'autre.
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  4. #24
    Futur Membre du Club
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Octobre 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Octobre 2015
    Messages : 15
    Points : 5
    Points
    5
    Par défaut
    j'ai deja testé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Image1.Picture.LoadFromStream(M);
    et ca me coute 700ms aussi; j'ai utilisé l'assign car l'exemple avec vampyreImaging(60ms) est écrit avec l'assign

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    FBitmap:= TImagingBitmap.Create;
      try
        D1:=Now;
        FBitmap.LoadFromStream(M);
        Image1.Picture.Assign(FBitmap);
        D2:=Now;
     
      finally
        FBitmap.free;
        M.free;
        memo1.Lines.Add( MilliSecondsBetween(D1,D2).ToString );
      end;
    et pour bien t'expliquer , j'ai une fonction qui fait une capture d'ecrans et ca retourne une bmp dans un stream et ce dernier doit etre afficher dans un Timage.

    Avec ce code j'obtiens 380 ms =>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Image1.Picture.LoadFromStreamWithFileExt(M, 'bmp');

  5. #25
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par matrix1233 Voir le message
    et pour bien t'expliquer , j'ai une fonction qui fait une capture d'ecrans et ca retourne une bmp dans un stream et ce dernier doit etre afficher dans un Timage.

    Avec ce code j'obtiens 380 ms =>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Image1.Picture.LoadFromStreamWithFileExt(M, 'bmp');
    Ok dans le cas présent pourquoi passer par un stream pour ta capture d'écran ? Pourquoi ne pas la faire directement dans un TBitmap ? cf ici pour plus d'infos


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    procedure TForm1.TakeAndShowScreenShoot;
    var
      ScreenDC: HDC;
      MyRec : TRect;
      LocalBitmap : Tbitmap;
     
    begin
      //Self.Visible:=false;
      LocalBitmap := TBitmap.Create;
      //sleep(2000);     
      try
        try
          ScreenDC := GetDC(1);
          LocalBitmap.LoadFromDevice(ScreenDC);        
        finally         
          Image1.Picture.assign(LocalBitmap);
          ReleaseDC(0, ScreenDC);      
        end;
      finally 
        LocalBitmap.free;
        //Self.Visible:=true;
      end;
    end;
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  6. #26
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Bonsoir,

    Je me suis amusé à faire un test très simple, dans le dossier des sources de VampyreImaging, à savoir rechercher dans tous les .pas le nombre d'occurrences des mots LoadFromFile, LoadFromStream et Scanline, résultats 11, 19 et 177 respectivement.

    On devine qui se tape le boulot, et pourquoi ça va si vite.

    Àmha, ça ne doit pas être insurmontable de se bricoler un prog en partant des sources de VI et en enlevant tout ce qui ne te servira pas.
    Ou alors attaquer ex nihilo avec Scanline mais là, tu n'es pas rendu.

    Ou te contenter du TBitmap : après tout, quand je fais une copie d'écran dans mon Linux, le résultat n'est pas instantané, faut pas rêver. Et on s'adapte.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  7. #27
    Futur Membre du Club
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Octobre 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Octobre 2015
    Messages : 15
    Points : 5
    Points
    5
    Par défaut
    la capture d'écran est envoyé en réseau et puis récupérer dans un stream.
    Mon besoin est tres clair; j'ai un stream que je doit afficher dans une Timage. tout autre alternative ne peut pas s'appliquer dans mon projet.

    Citation Envoyé par BeanzMaster Voir le message
    Ok dans le cas présent pourquoi passer par un stream pour ta capture d'écran ? Pourquoi ne pas la faire directement dans un TBitmap ? cf ici pour plus d'infos


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    procedure TForm1.TakeAndShowScreenShoot;
    var
      ScreenDC: HDC;
      MyRec : TRect;
      LocalBitmap : Tbitmap;
     
    begin
      //Self.Visible:=false;
      LocalBitmap := TBitmap.Create;
      //sleep(2000);     
      try
        try
          ScreenDC := GetDC(1);
          LocalBitmap.LoadFromDevice(ScreenDC);        
        finally         
          Image1.Picture.assign(LocalBitmap);
          ReleaseDC(0, ScreenDC);      
        end;
      finally 
        LocalBitmap.free;
        //Self.Visible:=true;
      end;
    end;

  8. #28
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 301
    Points
    11 301
    Billets dans le blog
    6
    Par défaut
    C'est donc un flux de 20 Mo qui passe par le réseau puis doit être affiché.
    Il met 700 ms pour s'afficher, mais combien pour la réception ?
    L'interface est-elle bloquée tout ce temps, et l'utilisateur obligé d'attendre ?
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  9. #29
    Futur Membre du Club
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Octobre 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Octobre 2015
    Messages : 15
    Points : 5
    Points
    5
    Par défaut
    je compresse . l'interface n'est pas bloqué.. c'est pas Là mon problème

  10. #30
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Citation Envoyé par matrix1233 Voir le message
    Mon besoin est très clair ; j'ai un stream que je dois afficher dans une Timage. Toute autre alternative ne peut pas s'appliquer dans mon projet.
    Et donc la solution aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ...
    thestream.Position := 0;
    Image1.Picture.LoadFromStream(thestream);
    Et si c'est trop long de faire patienter l'utilisateur pendant 0,7 secondes (), tu récris cette simple ligne en te basant sur VampyreImaging, puisque tu ne veux pas d'autre outil.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  11. #31
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 693
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 693
    Points : 13 128
    Points
    13 128
    Par défaut
    Citation Envoyé par matrix1233 Voir le message
    j'ai un stream que je doit afficher dans une Timage.
    Le TImage n'est pas indispensable. Dessine directement sur la fiche.

  12. #32
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par matrix1233 Voir le message
    la capture d'écran est envoyé en réseau et puis récupérer dans un stream.
    Mon besoin est tres clair; j'ai un stream que je doit afficher dans une Timage. tout autre alternative ne peut pas s'appliquer dans mon projet.
    Et ben, c'est si dur d'expliquer le contexte de ton application ? Excuses nous de ne pas être des devins. On ne peux pas mieux te répondre, si de ton coté tu ne nous donnes pas tous les éléments. Donc ben la tu as deux choix :

    1ere solution (comme JP l'a mentionné):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    thestream.Position := 0;
    Image1.Picture.LoadFromStreamWithFileExt(thestream, 'bmp');
    Si tu encode ta capture d'écran au format BMP, tu peux essayer au format JPG vue que tu l'envoies sur ton réseau. Les données seront ainsi moins volumineuse.

    2eme solution : (surement la plus efficace) encoder toi même ton MemoryStream ou juste un "ArrayOfByte" au format RGB et remplir le Bitmap du Timage (ou juste un TBitmap comme suggéré par AndNotOr) via ScanLine (cf fast direct pixel access)

    Bonne fin de soirée
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  13. #33
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Salut voisin,
    Citation Envoyé par Andnotor Voir le message
    Dessine directement sur la fiche.
    et tu fais ça comment ?

    Merci,
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  14. #34
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Salut voisin,


    et tu fais ça comment ?

    Merci,
    Hello, avec la méthode Canvas.Draw ou StretchDraw

    A+
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  15. #35
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut

    Citation Envoyé par BeanzMaster Voir le message
    Hello, avec la méthode Canvas.Draw ou StretchDraw
    J'ai testé Canvas.Draw, plus de 900 mSec au lieu de la moitié,

    Mais j'ai peut-être mal compris un truc ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    uses DateUtils;
     
    var
      Bitmap : TBitmap;
     
    procedure TForm1.FormActivate(Sender: TObject);
    begin
      if not opd.Execute then Halt; // OpenPictureDialog
      Bitmap := TBitmap.Create;
      Bitmap.LoadFromFile(opd.FileName);
    end;
     
    procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
    begin
      CloseAction := caFree; // pour éviter un warning
      if Assigned(Bitmap) then FreeAndNil(Bitmap);
    end;
     
    procedure TForm1.FormPaint(Sender: TObject);
    var
      d1: TDateTime;
    begin
      if Assigned(Bitmap) then begin
        d1 := now;
        Canvas.Draw(0,0, Bitmap);
        Caption := IntToStr(MilliSecondsBetween(d1, Now)); // 967 !
      end;
    end;
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  16. #36
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Jipété Voir le message



    J'ai testé Canvas.Draw, plus de 900 mSec au lieu de la moitié,

    Mais j'ai peut-être mal compris un truc ?
    Salut, non, c'est bien ça chez moi j'ai 624 lors du premier affichage (celui la prend plus de temps) ensuite si je redimensionne la fiche je tombe à 25 . Faut dire aussi que l'image est plutôt grande 2880x1800. Le mieux serai qu'il redimensionne l'image au dimension de son affichage avant l'envoi du stream.

    Avec une fenêtre de 1024x768 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    procedure TForm1.FormActivate(Sender: TObject);
    var
      bmp : TBitmap;
    begin
      if not opd.Execute then Halt; // OpenPictureDialog
      bmp := TBitmap.Create;
      Bitmap := TBitmap.Create;
      Bitmap.SetSize(1024, 768);
      Bitmap.PixelFormat := pf32bit;
      Bmp.LoadFromFile(opd.FileName);
      Bitmap.Canvas.StretchDraw(TRect.Create(0, 0, Bitmap.Width, Bitmap.Height), bmp);
      Bmp.free;
      Invalidate;
    end;
    Forcement on perd en qualité mais l'affichage passe à 5ms

    A+
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

Discussions similaires

  1. C'est trop lent car j'ai fait une bétise mais je ne sais pas ou
    Par JeromeSig dans le forum Général Python
    Réponses: 2
    Dernier message: 23/11/2017, 13h05
  2. Proxy HTTP - Très lent pour charger une page.
    Par astro01 dans le forum Réseau/Web
    Réponses: 4
    Dernier message: 15/05/2017, 23h22
  3. Code trop lent pour une écriture sur disque
    Par Anarchy64 dans le forum C
    Réponses: 6
    Dernier message: 12/12/2013, 19h54
  4. Le JPanel est trop reduit pour mon interface !
    Par LeNeutrino dans le forum JBuilder
    Réponses: 4
    Dernier message: 25/07/2005, 18h58
  5. [Info] Eclipse est-il gratuit pour développer une application ?
    Par kaishef dans le forum Eclipse Platform
    Réponses: 2
    Dernier message: 12/04/2005, 11h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo