Forum Liberty Basic France

Général » Image BMP Getpixel
Le 26/12/2020 à 12h41

Libertynaute Actif

Groupe: Membre

Inscrit le: 10/10/2017
Messages: 121
Hello,
J'ai lu avec intérêt tous les posts concernant la (les) fonction (fonctions) Getpixel sur JB
Alors une petite application s'est imposée.
J'ai finalement abandonné de la faire sur JB et de la faire sur LB.
Cela m'a évité de lire, créer, effacer le bmp sans arrêt.
L'utilisation de DLL pour la rapidité.
J'ai utilisé les fonctions suivantes:
'..............................................
Function GetPixel(hDC,x,y)
CallDLL #gdi32, "GetPixel", hDC as uLong,_
x As Long,y As Long, GetPixel As Long
End Function
'..............................................
Function GetRed(hDC,color)
blue=Int(color/(256*256))
green=Int((color-blue*256*256)/256)
GetRed=color-blue*256*256-green*256
End Function
'..............................................
Function GetGreen(hDC,color)
blue=Int(color/(256*256))
GetGreen=Int((color-blue*256*256)/256)
End Function
'..............................................
Function GetBlue(hDC,color)
GetBlue=Int(color/(256*256))
End Function
'..............................................
L'application est celle-ci : Suisse.zip
____________________
Castel

   
Le 26/12/2020 à 14h36

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2438
Deux petites critiques:
Tu n'a pas mis tes fichiers dans un dossier, et du coup, ça décompresse en vrac.
Il a l'air de manquer l'exe et le .bas, ce qui relativise l'intérêt de l'ensemble.
A part ça, ça sort lumineux
____________________
Roro

   
Le 26/12/2020 à 15h08

Libertynaute Actif

Groupe: Membre

Inscrit le: 10/10/2017
Messages: 121
Décidément je dois me rendre à l’évidence que je n’en fait pas une de bonne.
J’oublie toujours quelque chose. Peut-être je peut dire que je venait de le terminer et
j’étais pressé de le poster.
Je vais revoir le tout et je le poste à nouveau. Cette fois en mettant le tout dans un dossier.
Bonnes fêtes
____________________
Castel

   
Le 26/12/2020 à 15h16

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2438
J'ai été voir dans ton stock, il y a bien un dossier "Suisse" mais il est vide et il y a deux zip "Suisse" aux contenus identiques.
Si tu re-uploade un zip, il faut d'abord détruire l'ancien (icône corbeille sous le zip; ça te remet en haut de page, avec "ajouter un fichier" à droite) avant d'uploader le nouveau.
Dans le cas présent il faut détruire les deux "Suisse" et uploader le nouveau (avec le même nom sinon le lien n'est plus bon).

Note: Si tu poste pour le forum, ce n'est pas la peine de faire un exe avec les dll.
L'exe n'est nécessaire que si tu poste un soft pour quelqu'un qui n'a pas l'interpréteur (c'est le cas pour mon dernier "images to htm" dont je sortirai l'exe et les dll quand la personne qui l'a demandé l'aura pris(pour soulager le stockage)
____________________
Roro

   
Le 26/12/2020 à 18h39

Libertynaute Actif

Groupe: Membre

Inscrit le: 10/10/2017
Messages: 121
____________________
Castel

   
Le 26/12/2020 à 18h43

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2438
ça y est c'est bon.
Note: J'ai supprimé le lien mort et le dossier vide.
Ton système a l'air particulièrement efficace, car même en réduisant la carte ça continue de fonctionner (of couse puisque c'est basé sur la couleur).
Mais bon, avec les dll c'est sûr que c'est beaucoup plus puissant que JB sec

Note: Le dossier "Suisse" qui est dans le dossier général est inutile
C'est quand même étonnant de si mal maîtriser les fichiers in the dossiers alors que tu maîtrise les dll, autrement plus complexes.
____________________
Roro

   
Le 26/12/2020 à 19h09

Libertynaute Actif

Groupe: Membre

Inscrit le: 10/10/2017
Messages: 121
C’est toujours bien de savoir comment extraire manuellement une racine carrée d’un nombre et d’en comprendre le principe. Mais aujourd’hui pratiquement plus personne ne le fait manuellement.
Il y a les calculatrices et il y a aussi les DLL qui dans certains cas sont très utiles.
Alors pourquoi s’en priver ... il suffit de faire attention à les manipuler.
J’ai lu le cours d’Alice Watson sur les API. Il y a encore du boulot.
____________________
Castel

   
Le 26/12/2020 à 19h10

Libertynaute Actif

Groupe: Membre

Inscrit le: 10/10/2017
Messages: 121
Citation:
Merci de me supprimer le lien mort.

C'est fait et j'ai supprimé le dossier vide dans ton stock.
Ton système ouvre de belles perspectives.
____________________
Castel

   
Le 26/12/2020 à 19h18

Libertynaute Actif

Groupe: Membre

Inscrit le: 10/10/2017
Messages: 121
J’ai essayé de mettre un dossier que j’ai créé et j’ai aussi mis des fichiers dedans.
Je n’ai pas réussi, et j’avoue ne pas savoir malgré avoir longtemps essayé.
Je dois me résigner à envoyer un zip.
J’essaierai encore peut être qu’un jour j’y arriverais.
Et si tu m’envoyais une vidéo pour que je puisse voir comment faire afin de ne pas mourir bête ?
____________________
Castel

   
Le 26/12/2020 à 19h20

Libertynaute Actif

Groupe: Membre

Inscrit le: 10/10/2017
Messages: 121
Tu as vu aussi qu’avec les dll on peut changer l’icône en haut à gauche.
Cela change de la sempiternelle Torche.
____________________
Castel

   
Le 27/12/2020 à 01h30

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2438
Bah tu sais très bien faire les zip's, qui compressés pèsent moins lourd. (moins de données consommées et autres avantages...temps de transfert et ses aléas)
____________________
Roro

   
Le 27/12/2020 à 12h57

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2438
Roland:

Ton système ouvre de belles perspectives.

En fait les perspectives étaient déjà bien ouvertes car la même chose est faisable en JB
Mais ça reste un bel exemple d'emploi de dll.
____________________
Roro

   
Le 27/12/2020 à 15h03

Libertynaute Actif

Groupe: Membre

Inscrit le: 10/10/2017
Messages: 121
Citation:
Peut-être, mais avant de me lancer dans la réalisation de l’application , j’ai regardé un partout et je n’ai rien trouvé de semblable comme celle que j’ai faite !

En JB on peut faire ça:
(mettre le code dans un dossier avec ta carte; résultats dans la mainwin (aux clics)
Traitement au choix, le tien ne semble pas optimisable. (le select case paraît incontournable; sauf à faire deux tableaux un pour les couleurs couplé à un deuxième pour les textes, ou un tableau à deux dimensions en passant par val(couleur$).
Il y a plusieurs façon de cuire une volaille (proverbe US/UK)
Sachant que le traitement des tableaux est rapide ça vaudrait de comparer les temps "en tableaux" et "en select case". Ah ben nan, on va se taper n "if then". Le select case est bien incontournable.
Code VB :
 
 
   '  NOMAINWIN
    Filedialog "Open Bitmap","*.bmp", picFile$
    if picFile$="" then wait
    Open picFile$ for Input as #pic
        pic$=Input$(#pic, LOF(#pic))
    Close #pic
    picWidth = Asc(Mid$(pic$, 19, 1)) + (Asc(Mid$(pic$, 20, 1)) * 256)
    picHeight = Asc(Mid$(pic$, 23, 1)) + (Asc(Mid$(pic$, 24, 1)) * 256)
    if picWidth+220 > DisplayWidth-10 then notice,"L'image est trop large pour l'écran": wait
    if picHeight+50 > DisplayHeight-20 then notice,"L'image est trop haute pour l'écran": wait
        if picWidth <100 then notice,"Limite inférieure 100 x 100pxl": wait
    if picHeight <100 then notice,"Limite inférieure 100 x 100pxl": wait
    tempsnoaff=picWidth*picHeight*3.5/1000 'en ms
      '---------------fin mesure bmp-------------
     mapw=picWidth: maph= picHeight
    WindowWidth=mapw+15: WindowHeight=maph+40
    UpperLeftX = 10: UpperLeftY = 20
   ' TEXTBOX  #w.letextbox, 20 , 50, 180, 25
   ' BUTTON #w.go, "Go !", [go], UL, 270, 50, 40, 20
   GRAPHICBOX #w.g, 5, 5, mapw, maph
    OPEN "Help" FOR window_nf AS #w
    #w, "TRAPCLOSE [closeHelp]"
    #w.g, "when leftButtonDown [coord]"
    '#w.g, "when mouseMove [coord]"
    #w.g, "down;fill darkpink;color white;backcolor darkpink"
    loadbmp "image", picFile$
    #w.g, "drawbmp image 0 0"
    #w.g, "flush"
    wait
[coord]
   mX = MouseX : mY = MouseY
   col$ = GetPixelValue$(mX,mY)
   print col$
 wait
  function GetPixelValue$(x, y)
    #w.g, "getbmp gpv "; x; " "; y; " "; 1; " "; 1
    bmpsave "gpv", "getpvaluetemp.bmp"
    open "getpvaluetemp.bmp" for input as #gpv
    s$ = input$(#gpv, lof(#gpv))
    close #gpv
    if asc(mid$(s$, 29, 1)) = 32 then
        red = asc(mid$(s$, 69, 1))
        green = asc(mid$(s$, 68, 1))
        blue = asc(mid$(s$, 67, 1))
    end if
    GetPixelValue$ = str$(red)+" "+str$(green)+" "+str$(blue)
    kill "getpvaluetemp.bmp"
    unloadbmp "gpv"
  end function
    [pause]
        timer 400, [temps]
        wait
        [temps]
        timer 0
  return
  [closeHelp]
    unloadbmp "image"
    CLOSE  #w
    END
 
____________________
Castel

   
Le 27/12/2020 à 18h59

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2438
Suite du: 15h03
Traitement en tableaux:
Après test (boucle de 26 pas), les temps sont strictement égaux
Concluse: Le trairement en tableaux prend moins de place
Code VB :
 
'......dim...ect...
    color$="206 206 0 181 0 181 255 132 132 107 57 8 132 132 255"
    text$="vert violet rose marron bleu"
    a=1
    for x=1 to 5 '---to n couleurs
      col$(x)=word$(color$,a)+" "+word$(color$,a+1)+" "+word$(color$,a+2)
      tet$(x)=word$(text$,x)
      a=a+3
      next x
    wait
[coord]
   mX = MouseX : mY = MouseY
   c$ = GetPixelValue$(mX,mY)
   print c$
   gosub [sel$]
   print texte$
 wait
 [sel$]
   a=1
   for x=1 to 5 '---to n couleurs
     If c$= col$(x) then
       texte$=tet$(x) '---ou word$(text$,x)
     end if
   next x
 return
' function GetPix....
'....ect...
____________________
Roro

   
Général » Image BMP Getpixel  

 |  |

1 Utilisateur en ligne : 0 Administrateur, 0 Modérateur, 0 Membre et 1 Visiteur
Utilisateur en ligne : Aucun membre connecté
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie