BMP distorcido no QRCode PIX

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
Marcio-MMM
Usuário Nível 1
Usuário Nível 1
Mensagens: 11
Registrado em: 05 Fev 2021 09:44
Localização: São Paulo / SP

BMP distorcido no QRCode PIX

Mensagem por Marcio-MMM »

Olá, saudações a todos

A questão com o BMP gerado pelo QRCodeLib.dll (tanto o FastQRCode como o FullQRCode) é a seguinte:

1) Quando abro pelo PAINT, IrfanView ou outro, abre perfeitamente
bmp_ok.jpg
bmp_ok.jpg (35.85 KiB) Exibido 1612 vezes
2) Quando abro pelo sistema (Image, Button, etc) abre truncado
janela.jpg

Tentando contornar isso, pensei em converter de BMP para JPG ou PNG com FreeImage e....

1) Convertendo para JPG, gera um jpg com 0 bytes
diretorio.jpg
2) Convertendo para PNG, gera um png com o mesmo problema do BMP
png_gerado.jpg
png_gerado.jpg (11.4 KiB) Exibido 1612 vezes

Acho que tenho então duas questões em uma:
a) Como fazer abrir o BMP pelo IMAGE ou Button, da mesma forma como abre no PAINT/IrfanView/outros ?
b) Converter com FreeImage este BMP gerado não é possível?

Segue código completo que estou usando, lembrando que a geração da String do PIX (StringPix()) está funcionando corretamente.

Código: Selecionar todos

***** prog de testes

#include "minigui.ch"  
#include "hbdyn.ch"
#include "freeimage\FreeImag.ch"
#require "hbfimage"


Function Main()

   HB_GTSYS()

	**** Parametros Basicos cadastro da Empresa ****
	cPIX_KEY := "+5511900000000"  				// chave pix (CNPJ, email, celular)
	cPIX_RECEIVER := "Marcio Martins Moreira" // Nome do Proprietario do PIX
	cPIX_CITY := "Sao Paulo"      				// Nome da Cidade do proprietario do PIX
	cPIX_ZIPCODE := ""

	**** Dados Dinamicos no momentos da Geracao
	nPIX_AMOUNT := 1.25 					// Valor do PIX
	cPIX_DESCRIPTION := "Ped:12345 e demais dados"
	cPIX_IDENTIFICATION := "Identificacao"

	**** Gera String - Testada e OK! ****
	cString = StringPIX ( nPIX_AMOUNT , cPIX_KEY , cPIX_RECEIVER , cPIX_CITY , cPIX_ZIPCODE , cPIX_DESCRIPTION , cPIX_IDENTIFICATION )

	***** ATÉ AQUI, TUDO BEM !!!


	cFile := "arq"
	IF QRCode(cString , cFile+".bmp" )   && Se Gerou arquivo BMP
	

		**** Gera JPG e PNG a partir do BMP (FreeImage) ****
		GeraJPGPNG(cFile)


		**** Mostra o BMP na Tela ****
		ShowQRCode(cFile, cPIX_Description)

	ENDIF
	
	Return Nil








FUNCTION QRcode( cStr, cFile , lFull )
	lFull = iif(type("lFull")="L",lFull,.f.)
   hLib := hb_libLoad( "QRCodeLib.dll" )
	if lFull
	   hb_DynCall( { "FullQRCode", hLib, HB_DYN_CALLCONV_STDCALL  }, .T., .F.,;
			 			RGBCor(255,255,255), RGBCor(0,0,0), cStr, ;
      				3, 1,;
	               5, 5, 200, 200, cFile ) 
	else
	   hb_DynCall( { "FastQRCode", hLib, HB_DYN_CALLCONV_STDCALL}, cStr, cFile )
	endif 
   hb_libFree( hLib )
  	RETURN file(cFile)


FUNCTION RGBCor( nRed, nGreen, nBlue )
	RETURN ( nRed + ( nGreen * 256 ) + ( nBlue * 65536 ) ) 	
  	
  	




Function GeraJPGPNG(cFile)
   fi_Initialise()
   im := fi_Load( FIF_BMP, cFile+".bmp", BMP_DEFAULT )
   nwidthimg   := fi_GetWidth( im )
   nheightimg  := fi_GetHeight( im )
	fi_Save( FIF_PNG, im, cFile+".png", PNG_DEFAULT )
	fi_Save( FIF_JPEG, im, cFile+".jpg", JPEG_DEFAULT )
   fi_DeInitialise()
	Return Nil
  	




Function ShowQRCode (cFile , cPIX_Description)

	DEFINE WINDOW ShowQRCode ;
		AT 0,0 ;
		WIDTH GetDeskTopWidth()/2 ;
		HEIGHT GetDeskTopHeight()/2 ;
		TITLE "PIX:"+cPIX_Description ;
		main ;
		BACKCOLOR {0,0,0} 

	    DEFINE IMAGE Image_1
	        ROW    50
	        COL    50
	        WIDTH  200
	        HEIGHT 200
	        PICTURE cFile+".bmp"
	        VISIBLE .T.
	        STRETCH .t.
		end image

	    DEFINE BUTTON Button_x
	        ROW    50
	        COL    350
	        WIDTH  200
	        HEIGHT 200
	        ACTION ShowQRCode.release
	        FONTNAME "Arial"
	        FONTSIZE 9
	        VISIBLE .t.
	        PICTURE cFile+".bmp"
	    END BUTTON
	END WINDOW

	ShowQRCode.Center
	ShowQRCode.Activate


return Nil






**** GERACAO DE STRING FUNCIONANDO 
**** TESTADO - Marco/2023
function StringPIX()
	parameters nPIX_AMOUNT , cPIX_KEY , cPIX_RECEIVER , cPIX_CITY , cPIX_ZIPCODE , cPIX_DESCRIPTION , cPIX_IDENTIFICATION 

	Private cString
	cString := ""
   cString += get_p_value('00', '01')
   cString += get_p_value('01', '11')
   cString += get_p_account_information(cPIX_KEY, cPIX_DESCRIPTION)
   cString += get_p_value('52', '0000')
   cString += get_p_value('53', '986')
   cString += get_p_value('54', alltrim(str(nPIX_AMOUNT)))
   cString += get_p_value('58', 'BR')
   cString += get_p_value('59', cPIX_RECEIVER)
   cString += get_p_value('60', cPIX_CITY)
   ** cString += get_p_value('61', '')
   cString += get_p_additional_data_field(cPIX_IDENTIFICATION)
   cString += "6304"
   cString += hb_numtohex(hb_crcct(cString, 0xFFFF, 0x11021))
	return cString
   

function get_p_value(identify, value)
	return trim(identify + strzero(len(alltrim(value)), 2) + value)

function get_p_account_information(key, description)
   Local base_pix := get_p_value('00', 'br.gov.bcb.pix')
   Local info_string := ''
   info_string += get_p_value('01', key)
   info_string += get_p_value('02', description)
   return get_p_value('26', base_pix + info_string)


function get_p_additional_data_field(identification)
	if identification != Nil
		return get_p_value('62', get_p_value('05', identification))
	else
		return get_p_value('62', get_p_value('05', '***'))
	endif
	return
Depois de uma semana de luta sozinho, recorro à sabedoria de vocês que tanto têm me ajudado.

Márcio.´.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

BMP distorcido no QRCode PIX

Mensagem por Itamar M. Lins Jr. »

Olá!
Tá colocando um botão na frente da imagem.
controle Image ok
controle Button = quadrado preto na frente. ShowQRCode.release já apaga ?

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Marcio-MMM
Usuário Nível 1
Usuário Nível 1
Mensagens: 11
Registrado em: 05 Fev 2021 09:44
Localização: São Paulo / SP

BMP distorcido no QRCode PIX

Mensagem por Marcio-MMM »

Oi Itamar.
Botao fica ao lado da Imagem. Coloquei um IMAGE e o BUTTON lado-a-lado na tela (col=50 e o outro col=350).... E o Action é para, se pressionar o botão, .release

Veja as imagens na postagem... Verá como ficou a apresentação do BMP em ambos
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

BMP distorcido no QRCode PIX

Mensagem por JoséQuintas »

Está usando controles que já tem imagem, e lugar reservado pra imagem, e está desenhando como "tela de fundo".
Tente algum controle mais livre, ou até mesmo direto na dialog.
Ou mande como imagem do button ou do outro, do jeito normal.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

BMP distorcido no QRCode PIX

Mensagem por JoséQuintas »

Durante o texto, postou o fonte.
À primeira vista, tá usando do jeito normal e não tem o que mexer.

Não entendi esta parte:

Código: Selecionar todos

Function Main()

   HB_GTSYS()
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

BMP distorcido no QRCode PIX

Mensagem por JoséQuintas »

Tem certeza que o correto é PICTURE?
De repente podem ter dado o recurso de definir um fundo pra imagem transparente...
Não mexo com HMG, não sei dizer.

E na HMG Extended que tenho aqui, isso não existe.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Marcio-MMM
Usuário Nível 1
Usuário Nível 1
Mensagens: 11
Registrado em: 05 Fev 2021 09:44
Localização: São Paulo / SP

BMP distorcido no QRCode PIX

Mensagem por Marcio-MMM »

Caros
Itamar M. Lins Jr. escreveu:Olá!
Tá colocando um botão na frente da imagem.
controle Image ok
controle Button = quadrado preto na frente. ShowQRCode.release já apaga ?
Saudações,
Itamar M. Lins Jr.
Não tem controle sobreposto. A questão está no BMP gerado pelo FastQRCode/FullQRCode.


Perceba que chamo a BMP tanto no controle IMAGE como preenchimento do controle BUTTON. E ambos funcionam apresentando, mas o BMP está distorcido na apresentação.
Abrindo pelo FreeImage ( fi_Load ) e depois salvando em JPG ou PNG (fi_Save) dá problema.... Existe solução para isso?


Como disse, parece ser o BMP gerado. Anexo em BMP não é permitido no fórum, então segue em ZIP
arq.zip
(5.99 KiB) Baixado 189 vezes
JoséQuintas escreveu:Tem certeza que o correto é PICTURE?
De repente podem ter dado o recurso de definir um fundo pra imagem transparente...
Não mexo com HMG, não sei dizer.
E na HMG Extended que tenho aqui, isso não existe.
Sobre o PICTURE, aparentemente está correto, pois se converto o BMP ( abro e salvo pelo PAINT) as apresentações FUNCIONAM!

JoséQuintas escreveu:Durante o texto, postou o fonte.
À primeira vista, tá usando do jeito normal e não tem o que mexer.
Não entendi esta parte:

Código: Selecionar todos

Function Main()
   HB_GTSYS()
Quintas, sobre HB_GTSYS() , leia-se

Código: Selecionar todos

REQUEST HB_GT_WVG_DEFAULT
 REQUEST HB_GT_WVG
JoséQuintas escreveu:Está usando controles que já tem imagem, e lugar reservado pra imagem, e está desenhando como "tela de fundo".
Tente algum controle mais livre, ou até mesmo direto na dialog.
Ou mande como imagem do button ou do outro, do jeito normal.
Não entendi "controle mais livre". E já mando como imagem do button (foi uma tentativa também)

Grato a todos
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

BMP distorcido no QRCode PIX

Mensagem por JoséQuintas »

A princípio não é problema do Harbour.
Só sobra a LIB ou a forma de uso.
A HWGUI, por exemplo, tem a opção de usar o bitmap com transparência, o que de certa forma é alterar o bitmap.
A impressão que dá nas imagens é que tem um controle por cima, ou tem o espaço reservado do que seria pra uma imagem.
Por isso comentei de parecer que está sendo usado como fundo.
E de repente, esses controles tem um lugar pra imagem normal, e outro pra imagem de fundo, mas não achei referência sobre PICTURE.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

BMP distorcido no QRCode PIX

Mensagem por JoséQuintas »

bitmap.png
Vixe....
Usando que só usa API Windows.
Também deu problema.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

BMP distorcido no QRCode PIX

Mensagem por JoséQuintas »

bitmap.png
Criei uma nova imagem no paint, colei a do qrcode.
Deixei uma margem em branco, só por precaução.
Aï funcionou.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Marcio-MMM
Usuário Nível 1
Usuário Nível 1
Mensagens: 11
Registrado em: 05 Fev 2021 09:44
Localização: São Paulo / SP

BMP distorcido no QRCode PIX

Mensagem por Marcio-MMM »

Estranho é que abrindo o BMP pelo Paint, IrfanView, e outros (até o tranqueira do "FOTOS do Windows 10") funcionam. Segue informações do BMP (normal)
informacoes_bmp.jpg
JoséQuintas escreveu: Vixe....
Usando que só usa API Windows.
Também deu problema.
E com o BMP aparentemente nada de errado fora do "mundo Harbour" ...
Avatar do usuário
Marcio-MMM
Usuário Nível 1
Usuário Nível 1
Mensagens: 11
Registrado em: 05 Fev 2021 09:44
Localização: São Paulo / SP

BMP distorcido no QRCode PIX

Mensagem por Marcio-MMM »

Quintas,
O mágico eu vi... A mágica eu vi...
Agora conta como faz... Em detalhes para o neófito aqui...
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

BMP distorcido no QRCode PIX

Mensagem por JoséQuintas »

Repeti a operação, mas deixando 200x200 igual a original, e sem margem.
Também funcionou.

Sei lá o que tem no BMP gerado.
Será proteção ? ou coincidência ?
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

BMP distorcido no QRCode PIX

Mensagem por JoséQuintas »

Problemas malucos, soluções mais malucas ainda.
Pra PNG funciona?
Converte pra PNG, depois de volta pra BMP.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

BMP distorcido no QRCode PIX

Mensagem por JoséQuintas »

Como eu fiz no paint:

nova imagem
aparece tudo em branco

abri outro paint com o bmp
ctrl-a marcar tudo, COPIAR

voltei no outro paint vazio, COLAR
Propriedades: 200 x 200, pra usar o mesmo tamanho
Arquivo, salvar como, bitmap, e nome.

Teoriamente, a única coisa diferente da original seriam as definições básicas de BMP dentro do arquivo.

Então, via programa, convertendo pra PNG, e de volta pra BMP, deve gravar correto, sei lá que parte está errada.

Chute:
talvez seja imagem em preto e branco com definição de colorida, ou algo assim, o que teria definição diferente.
E sei lá porque.... só no LoadImage() dá diferença
Lembro que LoadImage() tem parâmetro pra monocromática, mas não sei se tem a ver com a origem, nenhuma LIB deve usar isso.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder