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

Langage Delphi Discussion :

Passer Adresse memoryStream


Sujet :

Langage Delphi

  1. #21
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    d'après ceci le code ci-dessous devrait fonctionner

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    var
      pixels:array[0..255,0..255] of Byte;
      x, y: Integer;
    begin
      for y := 0 to 255 do 
        for x := 0 to 255 do
          pixels[y, x] := x;
      EBW8Image1.SetImagePointer(256, 256, Integer(@pixels), 0)
    end;
    si tu obtiens un degradé linéaire c'est que le paramètre est bien un pointeur...mais en fait j'en doute.

    second test, utiliser GlobalAlloc pour avoir un hMem.

    ce qui peut se faire aussi comme ça
    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
     
    var
      pixels:array[0..255,0..255] of Byte;
      x, y: Integer;
      mem: hMem;
      ptr : Pointer;
    begin
      for y := 0 to 255 do 
        for x := 0 to 255 do
          pixels[y, x] := x;
      mem := GlobalAlloc(GMEM_FIXED, SizeOf(Pixels));
      ptr := GlobalLock(mem);
      Move(pixels, ptr^, SizeOf(pixels));
      GlobalUnlock(mem);
      EBW8Image1.SetImagePointer(256, 256, mem, 0);
      GlobalFree(mem);
    end;
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  2. #22
    Membre actif
    Avatar de castorcharly
    Homme Profil pro
    Chef de projet
    Inscrit en
    Février 2009
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2009
    Messages : 416
    Points : 299
    Points
    299
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    d'après ceci le code ci-dessous devrait fonctionner

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    var
      pixels:array[0..255,0..255] of Byte;
      x, y: Integer;
    begin
      for y := 0 to 255 do 
        for x := 0 to 255 do
          pixels[y, x] := x;
      EBW8Image1.SetImagePointer(256, 256, Integer(@pixels), 0)
    end;
    si tu obtiens un degradé linéaire c'est que le paramètre est bien un pointeur...mais en fait j'en doute.

    second test, utiliser GlobalAlloc pour avoir un hMem.

    ce qui peut se faire aussi comme ça
    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
     
    var
      pixels:array[0..255,0..255] of Byte;
      x, y: Integer;
      mem: hMem;
      ptr : Pointer;
    begin
      for y := 0 to 255 do 
        for x := 0 to 255 do
          pixels[y, x] := x;
      mem := GlobalAlloc(GMEM_FIXED, SizeOf(Pixels));
      ptr := GlobalLock(mem);
      Move(pixels, ptr^, SizeOf(pixels));
      GlobalUnlock(mem);
      EBW8Image1.SetImagePointer(256, 256, mem, 0);
      GlobalFree(mem);
    end;
    Ton premier test fonctionne, correctement jusqu'a environ la ligne 200, après j'ai une salade de point noir et blanc ! Beau dégradé sur les 200 première ligne du haut.

    Ton second test me fait une salade de point sur les 50 première ligne et après le canevas est blanc.
    “La perfection est atteinte, non pas lorsqu'il n'y a plus rien à ajouter, mais lorsqu'il n'y a plus rien à retirer.” Antoine de Saint-Exupéry.

    D1..D7-2005,2006-Xe2 Ent-XE7 archi-MsSql 2005..2008 & R2, FB 1.5..2.5.x.x -Win10,Win7/64-Xp-
    _____________________________________________________

  3. #23
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    Citation Envoyé par castorcharly Voir le message
    Ton premier test fonctionne, correctement jusqu'a environ la ligne 200, après j'ai une salade de point noir et blanc ! Beau dégradé sur les 200 première ligne du haut.

    Ton second test me fait une salade de point sur les 50 première ligne et après le canevas est blanc.
    c'est bizarre comme histoire...

    pour comprendre ce qu'il se passe, il faudrait modifier l'image, exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      FillChar(pixels[0], 256, $FF); // première ligne blanche
    et voir si la ligne s'affiche, et où elle s'affiche.
    idem pour la deuxième ligne, la dernière ligne, la première colonne, etc..

    ça te permettra de savoir comment sont interprétés les pixels


    Au fait, tout cela c'est pour afficher les pixels à l'écran ? car il n'est pas besoin d'avoir un ActiveX pour ça ...
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  4. #24
    Membre actif
    Avatar de castorcharly
    Homme Profil pro
    Chef de projet
    Inscrit en
    Février 2009
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2009
    Messages : 416
    Points : 299
    Points
    299
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    c'est bizarre comme histoire...


    Au fait, tout cela c'est pour afficher les pixels à l'écran ? car il n'est pas besoin d'avoir un ActiveX pour ça ...
    Je vais faire les tests que tu m'indiques.

    Et non ce n'est pas pour afficher des pixels à l'écran, je sais faire plus simple pour ça Cet activeX à d'autre fonction en particulier l'OCR qui fonctionne très bien.
    Ca fait 10 ans qu'on l'utilise et on ne vas pas en changer.
    L'objectif étant de ne plus passer par l'écriture sur disque, (qui fonctionne très bien), mais qui est qq. ms plus lent qu'un transfert en RAM.
    Comme je traite jusqu'a + de 75 scans/ seconde je cherche à gagner du temps partout.

    Si je n'arrive pas à utiliser cette fonction je continuerai avec le loadFromFile... mais je suis un têtu et je n'abandonne pas comme ça
    “La perfection est atteinte, non pas lorsqu'il n'y a plus rien à ajouter, mais lorsqu'il n'y a plus rien à retirer.” Antoine de Saint-Exupéry.

    D1..D7-2005,2006-Xe2 Ent-XE7 archi-MsSql 2005..2008 & R2, FB 1.5..2.5.x.x -Win10,Win7/64-Xp-
    _____________________________________________________

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 694
    Points : 13 130
    Points
    13 130
    Par défaut
    Ce 4e paramètre qu'ils appellent le Pitch est la taille d'une ligne en bits. Par conséquent et pour être sûr, l'exemple de Paul devrait préciser Width *8 et le mien non pas 16, 24 ou 32, mais Width *24.

    Dans leur système, le 1er pixel est en haut à gauche et non en bas à gauche. Mon exemple résulterait en une image inversée (tête en bas).

    ps: @Pixel est égal à Scanline

  6. #26
    Membre actif
    Avatar de castorcharly
    Homme Profil pro
    Chef de projet
    Inscrit en
    Février 2009
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2009
    Messages : 416
    Points : 299
    Points
    299
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    Ce 4e paramètre qu'ils appellent le Pitch est la taille d'une ligne en bits. Par conséquent et pour être sûr, l'exemple de Paul devrait préciser Width *8 et le mien non pas 16, 24 ou 32, mais Width *24.

    Dans leur système, le 1er pixel est en haut à gauche et non en bas à gauche. Mon exemple résulterait en une image inversée (tête en bas).

    ps: @Pixel est égal à Scanline
    Je n'ai pas encore eut le temps de tester ce que m'a proposé Paul, j'ai une appli en rade sur un serveur de prod... j'y suis depuis 5:00 du mat
    Dès que j'ai terminé je me remets sur mon activeX.

    Mais je note ce que tu me dis.
    “La perfection est atteinte, non pas lorsqu'il n'y a plus rien à ajouter, mais lorsqu'il n'y a plus rien à retirer.” Antoine de Saint-Exupéry.

    D1..D7-2005,2006-Xe2 Ent-XE7 archi-MsSql 2005..2008 & R2, FB 1.5..2.5.x.x -Win10,Win7/64-Xp-
    _____________________________________________________

  7. #27
    Membre actif
    Avatar de castorcharly
    Homme Profil pro
    Chef de projet
    Inscrit en
    Février 2009
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2009
    Messages : 416
    Points : 299
    Points
    299
    Par défaut
    Après mes galères de la journée, je reviens pour vous dire où j'en suis...

    Je dois dire que je nage en apnée !

    D'abord le test de Paul, le fillchar me remplit correctement une ligne blanche , mais je me suis rendu compte qu'il faut faire un refresh et le canevas est correctement dessiné.

    Avant refresh....................................après


    Et sans fillchar c'est pareil bien sur.
    Pardon mais là j'ai été en dessous de tout.
    “La perfection est atteinte, non pas lorsqu'il n'y a plus rien à ajouter, mais lorsqu'il n'y a plus rien à retirer.” Antoine de Saint-Exupéry.

    D1..D7-2005,2006-Xe2 Ent-XE7 archi-MsSql 2005..2008 & R2, FB 1.5..2.5.x.x -Win10,Win7/64-Xp-
    _____________________________________________________

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 694
    Points : 13 130
    Points
    13 130
    Par défaut
    Tu as donc encore un affichage en mosaïque

    Maintenant tu peux refaire un essai avec Scanline en convertissant l'image en 8 bits par PixelFormat := pf8bit ou en restant en 24 bits en utilisant un EBW24Image.

  9. #29
    Membre actif
    Avatar de castorcharly
    Homme Profil pro
    Chef de projet
    Inscrit en
    Février 2009
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2009
    Messages : 416
    Points : 299
    Points
    299
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    Tu as donc encore un affichage en mosaïque

    Maintenant tu peux refaire un essai avec Scanline en convertissant l'image en 8 bits par PixelFormat := pf8bit ou en restant en 24 bits en utilisant un EBW24Image.
    Pétard, ça marche !

    Comme prédit l'image est tête en bas.

    Mais bon sang qu'elle salade de transtypage :
    Mes images sortent du scanner dans un format de type Jpeg 256 ng.
    Je les stocke dans un TmemoryStream.
    Puis je prends ce TmemoryStream pour le charger dans un Tjpeg.
    Puis ce jpeg je l'assign à un Tbitmap pour pouvoir le passer à l'activeX via scanline !!!!

    Chui pas certain de gagner les ms escomptés là

    Mais on progresse toujours positif.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     ajpg:= TJPEGImage.Create;
     abmp:= Tbitmap.Create;
      try
          stream.Seek(0,0);
          ajpg.LoadFromStream(Stream);
          abmp.Assign(ajpg);
          abmp.PixelFormat:= pf8bit;
          EBW8Image1.SetImagePointer(abmp.Width,abmp.Height,integer(abmp.ScanLine[abmp.height-1]),0);
    “La perfection est atteinte, non pas lorsqu'il n'y a plus rien à ajouter, mais lorsqu'il n'y a plus rien à retirer.” Antoine de Saint-Exupéry.

    D1..D7-2005,2006-Xe2 Ent-XE7 archi-MsSql 2005..2008 & R2, FB 1.5..2.5.x.x -Win10,Win7/64-Xp-
    _____________________________________________________

Discussions similaires

  1. Passer adresse tab 2 dim structure
    Par flow_13 dans le forum Débuter
    Réponses: 5
    Dernier message: 16/10/2009, 15h33
  2. Réponses: 2
    Dernier message: 31/05/2006, 15h15
  3. Réponses: 3
    Dernier message: 28/02/2006, 08h43
  4. passer l'adresse d'un membre d'une structure ?
    Par tintin72 dans le forum C
    Réponses: 6
    Dernier message: 27/12/2005, 12h20
  5. Réponses: 6
    Dernier message: 29/11/2005, 16h40

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