Página 1 de 2

Imagem nos emails com resource

Enviado: 01 Jan 2016 15:37
por JoséQuintas
Comecei a usar o recém descoberto método de resource, existente no Harbour pra qualquer sistema operacional

Código: Selecionar todos

FUNCTION JPEGBancoItau()
   #pragma __binarystreaminclude "image\banco341.jpg" | RETURN %s

FUNCTION JPEGBancoBradesco()
   #pragma __binarystreaminclude "image\banco237.jpg" | RETURN %s

FUNCTION JPEGNatal()
   #pragma __binarystreaminclude "image\natal.jpg" | RETURN %s

FUNCTION JPEGAnoNovo()
   #pragma __binarystreaminclude "image\anonovo.jpg" | RETURN %s
Os dois primeiros, uso pra colocar imagem nos PDFs
Os dois últimos, vou passar a usar nos emails. É que final de ano troco o logotipo pelas imagens de festas.
Não vou mais precisar de arquivo em disco, nos clientes, para esses casos.

Ah sim... nos emails... a tip_Encode() que codifica imagem, converte conteúdo e não arquivo, então está do jeito que ela precisa.

Imagem nos emails com resource

Enviado: 01 Jan 2016 16:33
por asimoes
Olá Quintas,

Fiquei interessado neste recurso, você poderia postar um exemplo com pdf?

Imagem nos emails com resource

Enviado: 02 Jan 2016 20:08
por asimoes
Olá Quintas,

Você faz assim para usar a imagem em pdf?

Código: Selecionar todos

hb_MemoWrit( "teste.bin", JPegAsa() )
oPDF := PDFClass():New()
oPDF:cImagem   := "teste.bin"
FUNCTION JPegAsa()
   #pragma __binarystreaminclude "img\asaprev1.jpg" | RETURN %s


Imagem nos emails com resource

Enviado: 04 Jan 2016 16:36
por asimoes
Consegui com JPEG E PNG

Com as funções:

Código: Selecionar todos

oPDF:cImagem   := JPegAsa()

//oImage := HPDF_LoadPngImageFromMem( ::oPdf, cJPEGFile, nWidth  )
oImage := HPDF_LoadJpegImageFromMem( ::oPdf, cJPEGFile, nWidth )

#pragma -km+
FUNCTION JPegAsa()
   #pragma __binarystreaminclude "img\asaprev1.jpg" | RETURN %s

Imagem:
Screen Shot 01-04-16 at 04.29 PM.PNG

Imagem nos emails com resource

Enviado: 04 Jan 2016 17:32
por JoséQuintas
Não, acho que não conseguiu.

Código: Selecionar todos

oPDF:cImagem   := JPegAsa()
Na linha acima, carrega a imagem para a variável ::cImagem da classe

Código: Selecionar todos

oImage := HPDF_LoadJpegImageFromMem( ::oPdf, cJPEGFile, nWidth )
Nessa linha usa outra variável.

Falta ver a linha aonde usa o desenho, talvez tenha deixado igual antes.

O que já tentei aqui e não deu certo:

Código: Selecionar todos

TestJpg := MemoRead( "test.jpg" )
oImage := HPDF_LoadJPEGImageFromMem( ::oPDF, TestJpg, Len( TestJpg ) )
HPDF_Page_DrawImage( ::oPage, oImage, nLeft, nBottom, nWidth, nHeight )
pra usar no lugar deste:

Código: Selecionar todos

   oImage  := HPDF_LoadJPEGImageFromFile( ::oPdf, cJPEGFile )
   HPDF_Page_DrawImage( ::oPage, oImage, nLeft, nBottom, nWidth, nHeight )
São 2 etapas: carregar a imagem para o PDF, e depois desenhar a imagem.
Como arquivo ok.
Esse de memória ainda não consegui.

Imagem nos emails com resource

Enviado: 04 Jan 2016 17:38
por asimoes
Eu fiz esse outro método só para imagens resource

Código: Selecionar todos

METHOD DrawImageB( bJPEGFile, nRow, nCol, nWidth, nHeight ) CLASS PDFClass
   LOCAL oImage
   IF ::nType == PDF_TXT
      RETURN Nil
   ENDIF
   nRow    := ::RowToPDFRow( nRow )
   nCol    := ::ColToPDFCol( nCol )
   oImage := HPDF_LoadJPEGImageFromMem( ::oPdf, bJPEGFile, nWidth )
   //oImage := HPDF_LoadPngImageFromMem( ::oPdf, bJPEGFile, nWidth )
   //oImage := HPDF_LoadRawImageFromMem(::oPdf, bJPEGFile ) // testar
   HPDF_Page_DrawImage( ::oPage, oImage, nCol, nRow, nWidth, nHeight )
RETURN NIL

Imagem nos emails com resource

Enviado: 04 Jan 2016 17:42
por asimoes

Código: Selecionar todos

       oPDF := PDFClass():New()
       oPDF:nType     := 2 //1-Paisagem, 2-Retrato
       oPDF:cFileName := "TESTE.PDF"
       oPDF:cHeader01 := "TESTE"
       oPDF:cFields01 := "Matrícula Sócio/Dependente                         Dt.Entrada  Dt.Saída        "
       oPDF:nFontSize := 11
       oPDF:nMargin   := 18
       oPDF:bImagem   := JPegAsa() 
       oPDF:Begin()
No método PageHeader:

IF !Empty(::bImagem)
::DrawImageB( ::bImagem, 4, 0, 60, 30)
ENDIF

Imagem nos emails com resource

Enviado: 04 Jan 2016 18:17
por JoséQuintas
Caracas....
Tava com dois problemas de uma vez.

1. O JPEG que peguei pra teste não funcionava
2. O Harbour não recompila o fonte de resource, se apenas trocar o arquivo de imagem, por isso não adiantou trocar imagem

Apaguei tudo pra forçar recompilar e deu certo.
Versão resumida:

Código: Selecionar todos

cJPEGFile := JPEGNatal() 
oImage := HPDF_LoadJPEGImageFromMem( ::oPDF, cJPEGFile, Len( cJPEGFile ) )
HPDF_Page_DrawImage( ::oPage, oImage, nLeft, nBottom, nWidth, nHeight )

FUNCTION JPEGNatal()
   #pragma __binarystreaminclude "image\natal.jpg" | RETURN %s
Pra quem não entendeu:
Vai bastar o EXE. As imagens ficam embutidas no EXE.

Valeu ASimões.
Eu Ia quebrar a cabeça por muito tempo, porque o problema não era o fonte.

Imagem nos emails com resource

Enviado: 04 Jan 2016 20:23
por JoséQuintas
ASimões.

Verifique se acha interessante:

Código: Selecionar todos

METHOD DrawImageSize( nRow, nCol, nHeight, nWidth, cJPEGFile ) CLASS PDFClass

   ::DrawImageBox( nRow, nCol, nRow + nHeight, nCol + nWidth, cJPEGFile )
   RETURN NIL
DrawImageBox -> desenha passando coordenadas igual box: linha inicial, coluna inicial, linha final, coluna final
DrawImageSize -> desenha passando tamanho em linhas/colunas: linha inicial, coluna inicial, altura, largura

Na dúvida, deixei os dois modos, é só essa rotina a mais, bem pequena.
Padronizei tudo com o outro modo, mas mantive esse.

Imagem nos emails com resource

Enviado: 05 Jan 2016 11:20
por asimoes
Quintas,

Fiz um teste com:

Código: Selecionar todos

#pragma -km+
FUNCTION JPegAsa()
   #pragma __binarystreaminclude "img\asaprev1.jpg" | RETURN %s
Criei uma lib e funciona também.

Imagem nos emails com resource

Enviado: 05 Jan 2016 12:15
por JoséQuintas
não entendi o que quis dizer, foi sobre usar em LIB?

porque o #pragma -km+ ?
Pelo que vi no harbour isso é pra ativar macro substituição.
Compatibility flags: -k[options]

Options: c clear all flags (strict Clipper mode)
h[-] Harbour mode (default)
o[-] allow operator optimizations
i[-] enable support for HB_INLINE (default)
r[-] runtime settings enabled
s[-] allow indexed assignment on all types
x[-] extended Xbase++ mode (default)
u[-] strings in user encoding
d[-] accept macros with declared symbols
m[+] turn off macrotext substitution
j[+] turn off jump optimization in pcode
? this info

Imagem nos emails com resource

Enviado: 05 Jan 2016 12:47
por asimoes
Sim eu fiz um teste colocando a função em uma lib e funcionou.
libresource.hbp

Código: Selecionar todos

#---------------------------
# Nome da Lib
# ---------------------------
-olibresource
# ---------------------------
# Prg(s) e Rc(s)
# ---------------------------
libresource.prg
libresource.hbc

Código: Selecionar todos

{win}incpaths=d:\hb32fork\hwgui\include;
hbmk.hbmk

Código: Selecionar todos

libresource.hbc
-head=full
-n
-warn=no
-inc
-hblib
-workdir=.\objmingw\
libresource.prg

Código: Selecionar todos

#pragma -km+
FUNCTION PNGAsa()
   #pragma __binarystreaminclude "img\abertura.png" | RETURN %s
   
#pragma -km+
FUNCTION JPegAsa()
   #pragma __binarystreaminclude "img\asaprev1.jpg" | RETURN %s

Imagem nos emails com resource

Enviado: 05 Jan 2016 12:51
por asimoes
Quintas,

porque o #pragma -km+ ?

Eu peguei de um comentário do próprio Viktor, pode ser desnecessário.
Screen Shot 01-05-16 at 12.49 PM.PNG

Imagem nos emails com resource

Enviado: 05 Jan 2016 14:24
por asimoes
Quintas,

Acrescentando mais tempero na sopa (rs) um exemplo com wave (usando SND_MEMORY) na função PlayWave()

Obs.: A função MessageWave() pode estar embutida em uma lib.

Código: Selecionar todos


PlayWave(MessageWave(), .f.)

FUNCTION MessageWave()
   #pragma __binarystreaminclude "message.wav" | RETURN %s   

#pragma begindump
#include <windows.h>
#include <commctrl.h>
#include <mmsystem.h>

#include "hbapi.h"

HB_FUNC( PLAYWAVE )
{
   int     Style = SND_ASYNC;
   HMODULE hmod  = NULL;

   if( hb_parl( 2 ) )
   {
      Style = Style | SND_RESOURCE;
      hmod  = GetModuleHandle( NULL );
   }
   else
      Style = Style | SND_MEMORY;

   if( hb_parl( 3 ) )
      Style = Style | SND_SYNC;

   if( hb_parl( 4 ) )
      Style = Style | SND_NOSTOP;

   if( hb_parl( 5 ) )
      Style = Style | SND_LOOP;

   if( hb_parl( 6 ) )
      Style = Style | SND_NODEFAULT;

   hb_retl( PlaySound( hb_parc( 1 ), hmod, Style ) );
}

#pragma enddump

Imagem nos emails com resource

Enviado: 17 Jan 2016 13:56
por fladimir
Desculpe ser talvez um pouco "chato", mas o título correto do tópico não seria "Imagem nos PDFs com resources"?