PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WINDEV 25 → Wx - Somando 2 imagens uma delas transparente sobre uma foto ou video obtidos com a webcam com WL (Montagem de Imagens)
Wx - Somando 2 imagens uma delas transparente sobre uma foto ou video obtidos com a webcam com WL (Montagem de Imagens)
Iniciado por adrianoboller, mar., 03 2016 6:38 PM - 2 respostas
Membro registado
3.659 mensagems
Popularité : +175 (223 votes)
Publicado em março, 03 2016 - 6:38 PM
Prezados,

Vamos ver hoje a soma de 2 imagens, uma delas transparente sobre uma foto ou vídeo obtidos por uma câmera ou webcam com WL (Montagem de Imagens)

Segue abaixo a solução:





Video:



//Código para somar as imagens, enviado pelo sr Jerome:

IMGBackground is an Image // Image from webcam

IMGPNG is an Image

dCopy(IMGPNG ,IMGBackGround)

//Please note that the final image IMGBackground.

//Image must have the same size.


Links de referencia:
http://help.windev.com/en-US/search2.awp…
http://help.windev.com/en-US/…
http://help.windev.com/en-US/…
http://help.windev.com/en-US/…
http://help.windev.com/en-US/…
http://help.windev.com/en-US/…

Forte abraço a todos

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.blogspot.com.br/
Membro registado
3.659 mensagems
Popularité : +175 (223 votes)
Publicado em abril, 05 2016 - 10:13 PM
Prezados,

Segue alguns detalhes apontados pelo Danilo Valim

//********************************************************************
//Gerando imagem usando crypt
//********************************************************************
bufImageBuffer is Buffer = ""
sImageString is string = ""

bufImageBuffer = fLoadBuffer(IMG_1)

sImageString = Crypt(bufImageBuffer,"",cryptNone)
//sImageString = Crypt(bufImageBuffer,"TesteSenhaCript",cryptFast) //Com criptografado com senha

//info(length(sImageString)) - Qtde de Caracteres da Imagem Serializada - 3324508




//********************************************************************
//Usando Código dessa Forma Consigo Inserir uma Imagem de Tamanho - 2,31 Mb
//********************************************************************
gdsConsulta is Data Source
HClose(gdsConsulta)

gsQuery is string = "Execute Cadastro_Anexo "+EDT_Nome_Imagem+" ,'"+sImageString+"',0"
IF NOT HExecuteSQLQuery(gdsConsulta,CONN2, hQueryWithoutCorrection, gsQuery) THEN
Info(HErrorInfo())
ELSE
HReadFirst(gdsConsulta, MsgProd)
WHILE HOut() = False
IF gdsConsulta.MsgProd <> "OK" THEN
Error(gdsConsulta.MsgProd)
ELSE
Info("OK")
END
HReadNext(gdsConsulta)
END
END



//*********************************************************************************
//Usando esse Código, dessa Forma da Estouro de Buffer, Variavel sImageString
//vai Cortada e da Erro, não funciona, não use HEXECUTEQUERY, USE
//HEXECUTESQLQUERY, É MAIS ADEQUADO.
//***********************************************************************************
IF HExecuteQuery(QRY_Insert_Foto,hQueryDefault,EDT_Nome_Imagem,sImageString) = False THEN
Info(HErrorInfo())
ELSE
Info("Imagem salva com Sucesso!!")
END



//*********************************************************************************
//Dessa Forma também da Estouro de Buffer, Variavel sImageString vai
//Cortada e da Erro, não funciona
//***********************************************************************************
dsQry_Sql is Data Source

sQl_execute is string =
[
Insert INTO Anexo_Teste
(
NomeAnexo,
Foto
)
VALUES
(
'@NomeAnexo@',
'@Foto@'
)
]

sQl_execute = Replace(sQl_execute,"@NomeAnexo@",EDT_Nome_Imagem)
sQl_execute = Replace(sQl_execute,"@Foto@",sImageString)

ok is boolean = HExecuteSQLQuery(dsQry_Sql,hQueryDefault+hCheckDuplicates+hCheckIntegrity,sQl_execute)
IF ok = True THEN
Info("OK")
ELSE
Info(HErrorInfo(),ErrorInfo())
END




//***********************************
Conteudo da variavel sImageString
//***********************************

/9j/4QJMRXhpZgAASUkqAAgAAAAMAAABBAABAAAAIBAAAAEBBAABAAAAGAwAAA8BAgAIAAAAngAAABAB
AgAJAAAApgAAABIBAwABAAAABgAAABoBBQABAAAAsAAAABsBBQABAAAAuAAAACgBAwABAAAAAgAAADEB
AgANAAAAwAAAADIBAgAUAAAAzgAAABMCAwABAAAAAQAAAGmHBAABAAAA4gAAAAAAAABTQU1TVU5HAEdU
LUk5NTA1AABIAAAAAQAAAEgAAAABAAAASTk1MDVWSlVFTUtFAAAyMDE0OjA0OjAzIDIzOjI0OjA4AA8A
IogDAAEAAAACAAAAAJAHAAQAAAAwMjIwA5ACABQAAACcAQAABJACABQAAACwAQAAAZEHAAQAAAABAgMA
B5IDAAEAAAACAAAAfJIHAGIAAADEAQAAAKAHAAQAAAAwMTAwAaADAAEAAAABAAAAAqAEAAEAAAAgEAAA
A6AEAAEAAAAYDAAABaAEAAEAAAAmAgAAAqQDAAEAAAAAAAAAA6QDAAEAAAAAAAAABqQDAAEAAAADAAAA
AAAAADIwMTQ6MDQ6MDMgMjM6MjQ6MDgAMjAxNDowNDowMyAyMzoyNDowOAAHAAEABwAEAAAAMDEwMAIA
BAABAAAAACABAAwABAABAAAAAAAAABAABQABAAAAWgAAAEAABAABAAAAAAAAAFAABAABAAAAAQAAAAAB
AwABAAAAAAAAAAAAAAAAAAAAAAAAAAIAAQACAAQAAABSOTgAAgAHAAQAAAAwMTAwAAAAAP/bAIQAAQEB
AQEBAQEBAQEBAQICAwICAgICBAMDAgMFBAUFBQQEBAUGBwYFBQcGBAQGCQYHCAgICAgFBgkKCQgKBwgI
CAEBAQECAgIEAgIECAUEBQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
CAgICAgI/8AAEQgMGBAgAwEiAAIRAQMRAf/EAaIAAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKCxAA
AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRol
JicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZ
mqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6AQAD ........


//Obs: Nao da certo de terminar de montar o INSERT, Corta no meio o Insert.


:merci:

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.blogspot.com.br/
Membro registado
3.659 mensagems
Popularité : +175 (223 votes)
Publicado em agosto, 09 2016 - 11:44 PM
Alterando uma imagem colorida para preto e branco (tons de cinza):

Exemplo:

dCopieImage(IMG_FAX1, IMG_FAX1, copiePasSrcCopie)
//copie de l'image d'origine dans l'image destination
//en niveau de gris
IMG_FAX1=dSauveImageJPEG(IMG_ORIGINE,enMémoire,100,imgNiveauDeGris)
//converti l'image destination en monochrome
Floyd_Steinberg(IMG_FAX1,POT_SEUIL)



// Résumé : <indiquez ici ce que fait la procédure>
// Syntaxe :
//Floyd_Steinberg (<ChampImage> [, <rSeuil>])
//
// Paramètres :
// ChampImage : <indiquez ici le rôle de ChampImage>
// rSeuil (valeur par défaut=50) : < indiquez ici le rôle de nSeuil >
// Valeur de retour :
// Aucune
//
// Exemple :
// Indiquez ici un exemple d'utilisation.
//
Procedure Floyd_Steinberg(ChampImage,rSeuil=50)
nLargeur,nHauteur sont des entiers

nLargeur =ChampImage..Largeur
nHauteur =ChampImage..Hauteur

//fonction de dessin sur le champ image
dDébutDessin(ChampImage)

nCouleurPoint est un entier
nNouvelleCouleurPoint est un entier
nQteErreur est un entier

//Parcours en largeur
POUR x=1 _A_ nLargeur
//et en hauteur
POUR y=1 _A_ nHauteur
//couleur du point en cours
nCouleurPoint=dPixelCouleur( x,y)
//Couleur du point que l'in va mettre à la place, en fonction de la luminosité (ici rSeuil %)
nNouvelleCouleurPoint=NouvelleCouleur(nCouleurPoint,rSeuil)
//Change la couleur du point
dPoint(x,y,nNouvelleCouleurPoint)
//Calcul de l'erreur qu'il y avait sur le point pour effectuer le changement de couleur
SI nNouvelleCouleurPoint<>iNoir ALORS
nQteErreur=255
SINON
nQteErreur=0
FIN

// ATTENTION : C'est une application simpliste qui n'a pour but uniquement de montrer qu'il est facilement possible d'appliquer des algorithmes de traitement d'image
// Applique l'algorithme de Floyd-Steinberg
// L'algorithme de Floyd-Steinberg est utilisé en traitement d'images.
// Cet algorithme effectue un tramage par la diffusion de l'erreur de quantification d'un pixel à ses voisins.
// Plus précisement, 7/16 de son erreur est ajoutée au pixel à sa droite,
// 3/16 au pixel situé en bas à gauche,
// 5/16 au pixel situé en dessous et
// 1/16 au pixel en bas à droite.
//On applique dans l'erreur sur les point voisin
SI x<nLargeur ALORS dPoint(x+1,y,dPixelCouleur(x+1,y)+(nQteErreur*(7/16)))
SI y<nHauteur ALORS dPoint(x-1,y+1,dPixelCouleur(x-1,y+1)+(nQteErreur*(3/16)))
SI y<nHauteur ALORS dPoint(x,y+1,dPixelCouleur(x,y+1)+(nQteErreur*(5/16)))
SI y<nHauteur ALORS dPoint(x+1,y+1,dPixelCouleur(x+1,y+1)+(nQteErreur*(1/16)))
FIN
FIN

//que du N&B
POUR x=1 _A_ nLargeur
//et en hauteur
POUR y=1 _A_ nHauteur
nCouleurPoint=dPixelCouleur( x,y)
SI nCouleurPoint<>iNoir ALORS
dPoint(x,y,iBlanc)
FIN
FIN
FIN



// Résumé : Passe l'image se trouvant dans le champ image en monochrome
// Syntaxe :
//Monochrome (<ChampImage> [, <rSeuil>])
//
// Paramètres :
// ChampImage : Champ image contenant l'image a passer en monochrome
// rSeuil (valeur par défaut=50) : Seuil de luminosité des point déterminat si le point doit être noir ou blanc
// Valeur de retour :
// Aucune
//
// Exemple :
// Monochrome(IMG_FAX,50)
//
Procedure Monochrome(ChampImage,rSeuil=50)

//taille du champ
nLargeur est un entier=ChampImage..Largeur
nHauteur est un entier=ChampImage..Hauteur
//fonction de dessin sur le champ image
dDébutDessin(ChampImage)
//parcours des points de l'image
//en largeur
POUR x=0 _A_ nLargeur
//et en hauteur
POUR y=0 _A_ nHauteur
//reaffecte la couleur à chaque point de l'image
//en fonction de la luminosité (ici rSeuil %)
dPoint(x,y,NouvelleCouleur(dPixelCouleur( x,y),rSeuil))


FIN
FIN



// Résumé : en fonction de la couleur passée en paramètre retourne la couleur correspond à l'effet. Donc Ici Noir ou Blanc
// Syntaxe :
//[ <Résultat> = ] NouvelleCouleur (<nCouleurPoint>, <rSeuil>)
//
// Paramètres :
// nCouleurPoint : couleur d'origine du point
// rSeuil : seuil de luminosité qui va déterminer si on transforme le point en noir ou en blanc
// Valeur de retour :
// entier : nouvelle couleur
//

Procedure NouvelleCouleur(nCouleurPoint,rSeuil)

//Couleur en en fonction de la luminosité (ici rSeuil %)
SI CouleurLuminosité(nCouleurPoint)>=rSeuil ALORS
//en remplace par un point noir
RENVOYER iNoir
SINON
//ou en remplace par un point blanc
RENVOYER iBlanc
FIN



--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Mensagem modificada, agosto, 09 2016 - 11:48 PM