PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV Mobile 2024 → Redimensionner une image à la volée dans une appli Androïd
Redimensionner une image à la volée dans une appli Androïd
Débuté par Guillaume, 18 oct. 2018 09:24 - 1 réponse
Membre enregistré
79 messages
Popularité : +1 (1 vote)
Posté le 18 octobre 2018 - 09:24
Bonjour,

Je développe une petite app androïd pour ma pomme (gestion d'association). Pas d'appli desktop. juste un hfsql c/s, un serveur de réplication, une appli androïd et le dev avec une base hf classic (qui est incluse dans l'apk final)

Mon problème :
je photographie avec l'appareil androïd un document que je stocke ensuite en mmo image (pas la peine de me dire que c'est mal, je l'ai lu plein de fois mais avec 80 adhérents ça fait pas une grosse base et ça se manipule correctement). Mais la résolution la plus basse des prises de vue sur mon appareil est encore trop lourde et génère des fichiers de 1,5 à 2Mo.
Redimensionnées (longueur et largeur /2), c'est parfait : le doc reste lisible à l'écran et son poids est divisé par un rapport de 4 à 6, c'est parfait. (surtout que je synchronise la base avec un serveur de réplic qui est sur ma machine perso, derrière une ADSL rurale, donc c'est mieux quand c'est pas trop lourd)

J'ai la même routine de redim pour des photos qui seraient importées de la galerie (ce qui me permet de faire des tests sur le simulateur Android).

Le problème est que ça fonctionne très bien en test sur le poste de dev, mais qu'une fois sous androïd, j'ai au mieux une image pas redimensionnée, au pire une erreur.

3 jours que je cherche dans tous les sens sans arriver à mes fins. J'ai trituré le code à base de dSauveImageJPEG, dChargeImage, hExtraitMemo, hAttacheMemo...

Le dernier test (mais j'ai tenté tellement de variantes de code que ce n'est pas le plus probant) :
//procédure Redimensionne
img est une Image
img = dChargeImage(CONTRAT.IMAGE)
dRedimensionne(img, img..Largeur / 2, img..Hauteur / 2)
img2 est une Image = dSauveImageJPEG(img,enMémoire)
HAttacheMémo(CONTRAT,Image,img2,hMemoImg)
SI HModifie(CONTRAT) ALORS
ToastAffiche("Photo automatiquement redimensionnée :)")
gbNouvellePhoto1 = 0 //juste un booléen qui définit si la proc doit être éxécutée
SINON
ToastAffiche("Echec redimensionnement photo :(")
FIN

La dernière erreur sur Androïd est un pb de conversion d'image vers chaine...
En test : pas d'image renvoyée

Le précédent (un peu mieux)


Question subsidiaire issue de mes lectures pcsoftiennes : quelle est la différence entre émulateur et simulateur Androïd (s'il y en a une) ?

Merci pour votre aide,

Guillaume
Membre enregistré
79 messages
Popularité : +1 (1 vote)
Posté le 18 octobre 2018 - 17:11
Voici un code qui fonctionne dans l'environnement de dév (émulateur ou simulateur ou whatever) :
Le mémo est mis à jour, l'image est moins grande et moins volumineuse :)

HLitRecherchePremier(CONTRAT,IDCONTRAT,idcontrat)
MonImage est une Image = dChargeImage(CONTRAT.IMAGE)
sImgTmp est une chaîne UNICODE = fRepDonnées() + "/image.jpg"
sImgTmp2 est une chaîne UNICODE = fRepDonnées() + "/image2.jpg"
dRedimensionne(MonImage,MonImage..Largeur/2,MonImage..Hauteur/2)
dSauveImageJPEG(MonImage,sImgTmp2)
HAttacheMémo(CONTRAT,Image,sImgTmp2,hMemoImg)

HModifie(CONTRAT)

fSupprime(sImgTmp)
fSupprime(sImgTmp2)


Déployé sur mon tel... je prends une photo, je synchro avec la base c/s et...

ça y'est ça fonctionne :)))
Je commençais à ne plus y croire !!

G.