Harbour & conversão de imagens pra BMP

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

Moderador: Moderadores

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

Harbour & conversão de imagens pra BMP

Mensagem por JoséQuintas »

Tem alguma coisa dentro do Harbour pra converter imagens?

Na grande maioria dos casos, só dá pra usar BMP ou ICO.
Só que um resource BMP é 20 vezes maior que um resource JPG.
Tem alguma coisa no Harbour que permitiria converter ou algo assim?
Mas em memória, porque se tiver que salvar em disco, acho que não chega a ser vantagem.
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/
MSDN
Usuário Nível 4
Usuário Nível 4
Mensagens: 741
Registrado em: 28 Nov 2003 15:55
Localização: CWB
Contato:

Harbour & conversão de imagens pra BMP

Mensagem por MSDN »

Quintas,

Eu sei que você utiliza GTWVG (ou GTWVW, não lembro agora) como interface gráfica de seus aplicativos Harbour, por que você preza por uma programação mais enxuta, mas não custa dizer que com a MiniGUI, você pode usar além do BMP, JPG, ICO e PNG em um arquivo de recursos. No seu caso, a única desvantagem seria ter que reescrever o fonte, não tem como aproveitar nada, mas nesse caso valeria mais a pena partir para Java ou C#, de qualquer forma, é possível programar com MiniGUI de forma que sejam gerados programas leves.
Outra coisa interessante, seria buscar código fonte em C++ que faça interface com a API do Windows na parte gráfica, e "criar" uma mini LIB só com o que precisa, sem depender de terceiros.

Abraço
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

Harbour & conversão de imagens pra BMP

Mensagem por Kapiaba »

Mister Quintas Talvez, usando GdiPlus do Harbour/xharbour: veja se ajuda:

http://oohg.wikia.com/wiki/GDIPlus_Sample_n%C2%B0_1

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

Harbour & conversão de imagens pra BMP

Mensagem por JoséQuintas »

Eu sei que você utiliza GTWVG (ou GTWVW, não lembro agora) como interface gráfica de seus aplicativos Harbour, por que você preza por uma programação mais enxuta
É que não gosto de nenhuma lib gráfica do Harbour, muito trabalho pra pouca coisa.
E a minigui tem algo diferente: é como voltar a usar VB6, mas sem funcionar coisas básicas do VB6, principalmente uma IDE.

Quando terminar com MySQL, pode ser que volte a olhar alguma coisa gráfica no Harbour.

Por enquanto não quero ficar preso a nenhuma LIB gráfica, e nenhuma LIB de MySQL.
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/
MSDN
Usuário Nível 4
Usuário Nível 4
Mensagens: 741
Registrado em: 28 Nov 2003 15:55
Localização: CWB
Contato:

Harbour & conversão de imagens pra BMP

Mensagem por MSDN »

Complementando minha postagem acima, nesse link existem muitas informações úteis para o programador Harbour :

http://harbourlanguage.blogspot.com.br/ ... ur-gt.html

Obviamente está tudo em inglês, mas se usar o Chrome ele traduz no browser, ou então copiar e colar no Google Tradutor.

Abraços
wmanesco
Usuário Nível 3
Usuário Nível 3
Mensagens: 116
Registrado em: 09 Set 2016 13:18
Localização: ITAJAI - SC

Harbour & conversão de imagens pra BMP

Mensagem por wmanesco »

Quintas, entendo sua posição sobre lib gráfica, isso até seria assunto pra outro tópico... mas gostaria de deixar a dica de testar fivewin, pra mim é a melhor e mais completa... tem bastante recursos..

recentemente to testando a hbqt, é bem bacana também, mas ai vai depender do projeto pra decidir qual lib usar...
William Manesco
Harbour 3.x | Fivewin | BCC | MySQL (TDolphin) | HBQT | HBIDE | Atom
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Harbour & conversão de imagens pra BMP

Mensagem por JoséQuintas »

Inglês até que não é problema.
Já vi esse site antes.
Continuo não me interessando por ele, continuo achando ruim, tanto pela lentidão de acesso, quanto pelo conteúdo.

Sim, fivewin continua sendo a melhor.
Nasceu antes do Harbour, e tem anos de experiência.


Porque não se troca de linguagem?
Pra aproveitar fontes.
Mas se LIB gráfica vai obrigar a re-escrever tudo... não se trata de escolher apenas "a melhor lib pra Harbour"....
Por isso vou continuando com MySQL e deixando essa escolha pra depois.
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/
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

Harbour & conversão de imagens pra BMP

Mensagem por Kapiaba »

Mister Quitas, talvez o Harbour tenha uma função equivalente ou melhor que a:

Código: Selecionar todos

    hb_showPCX()
do xHarbour, somente uma idéia, nem sei se funciona.

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

Harbour & conversão de imagens pra BMP

Mensagem por JoséQuintas »

Era pra usar num pushbutton, ou qualquer coisa equivalente.
Se o Windows não aceita diretamente, tudo bem, pelo menos esta imagem é pequena.
Pra harupdf tudo bem, aceita jpeg.
Até tentei usar a mesma função da harupdf pra ver se dava certo.... rs.... mas não deu.
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
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Harbour & conversão de imagens pra BMP

Mensagem por Itamar M. Lins Jr. »

Ola!
Use a freeimage!

Código: Selecionar todos

/* Copyright 2005 Francesco Saverio Giudice <info@fsgiudice.com>
 * FreeImage API test file
 */

#require "hbfimage"

#include "fileio.ch"
#include "simpleio.ch"

#define IMAGES_IN   ""
#define IMAGES_OUT  "imgs_out" + hb_ps()

PROCEDURE Main()

   LOCAL im, clone, rotated, rotatedEx, rescale, im2, im3
   LOCAL centerX, centerY, width, height

#if 0
   LOCAL bmpinfo
   LOCAL bmpinfoheader
   LOCAL iccprofile
   LOCAL appo
#endif
   LOCAL bkcolor
   LOCAL cStr

#if 0
   ? "Press Alt-D + Enter to activate debug"
   AltD( .T. )
   Inkey( 0 )
#endif
   AltD()

   hb_vfDirMake( IMAGES_OUT )

   ? "Initialise"
   fi_Initialise()

   ? "Version          :", fi_GetVersion()
   ? "Copyright        :", fi_GetCopyrightMessage()
   ? "File type        :", fi_GetFileType( IMAGES_IN + "sample1.jpg" )

   ? "Set Error Message (symbol):", fi_SetOutputMessage( @fi_Error() )
   ? fi_Load( FIF_JPEG, IMAGES_IN + "nothere.jpg", JPEG_DEFAULT )
   ? "Set Error Message (block):", fi_SetOutputMessage( {| cFormat, cMessage | fi_Error( cFormat, cMessage ) } )
   ? fi_Load( FIF_JPEG, IMAGES_IN + "nothere.jpg", JPEG_DEFAULT )

   ? "Load JPEG directly from file"
   im := fi_Load( FIF_JPEG, IMAGES_IN + "sample1.jpg", JPEG_DEFAULT )

   ? "Clone image"
   clone := fi_Clone( im )

   ? "Pointer          :", hb_ValToExp( im )

   ? "Image Type       :", fi_GetImageType( im )
   ? "Color Used       :", fi_GetColorsUsed( im )
   ? "Pixel size       :", fi_GetBPP( im )
   ? "Width            :", fi_GetWidth( im )
   ? "Height           :", fi_GetHeight( im )
   ? "Byte Size        :", fi_GetLine( im )
   ? "Pitch            :", fi_GetPitch( im )
   ? "DIB Size         :", fi_GetDIBSize( im )
   ? "Dots per Meter X :", fi_GetDotsPerMeterX( im )
   ? "Dots per Meter Y :", fi_GetDotsPerMeterY( im )
   ? "Color Type       :", fi_GetColorType( im )
   ? "Red Mask         :", fi_GetRedMask( im )
   ? "Green Mask       :", fi_GetGreenMask( im )
   ? "Blue Mask        :", fi_GetBlueMask( im )
   ? "Transp. Count    :", fi_GetTransparencyCount( im )
   ? "Is Transparent ? :", fi_IsTransparent( im )
   ?
   ? "Save BMP ?       :", fi_Save( FIF_BMP , im, IMAGES_OUT + "sample1.bmp", BMP_DEFAULT  )
   ? "Save JPG ?       :", fi_Save( FIF_JPEG, im, IMAGES_OUT + "sample1.jpg", JPEG_DEFAULT )
   ? "Save PNG ?       :", fi_Save( FIF_PNG , im, IMAGES_OUT + "sample1.png", PNG_DEFAULT  )

   ? "Save TIFF ?      :", fi_Save( FIF_TIFF, clone, IMAGES_OUT + "sample1.tif", TIFF_DEFAULT )
   ? "Flip Horizontal ?:", fi_FlipHorizontal( clone )
   ? "Save JPG ?       :", fi_Save( FIF_JPEG, clone, IMAGES_OUT + "horizont.jpg", JPEG_DEFAULT )
   ? "Flip Vertical ?  :", fi_FlipVertical( clone )
   ? "Save JPG ?       :", fi_Save( FIF_JPEG, clone, IMAGES_OUT + "vertical.jpg", JPEG_DEFAULT )

   ? "Rotate Classic   :", hb_ValToExp( rotated := fi_RotateClassic( clone, 90 ) )
   ? "Save JPG ?       :", fi_Save( FIF_JPEG, rotated, IMAGES_OUT + "rotate.jpg", JPEG_DEFAULT )

   centerx := fi_GetWidth( clone ) / 2
   centery := fi_GetHeight( clone ) / 2
   ? "Rotate Ex        :", hb_ValToExp( rotatedEx := fi_RotateEx( clone, 15, 0, 0, centerx, centery, .T. ) )
   ? "Save JPG ?       :", fi_Save( FIF_JPEG, rotatedEx, IMAGES_OUT + "rotateex.jpg", JPEG_DEFAULT )

   width   := fi_GetWidth( im )
   height  := fi_GetHeight( im )

   ? "Rescale          :", hb_ValToExp( rescale := fi_Rescale( im, width / 2, height / 2, FILTER_BICUBIC ) )
   ? "Save JPG ?       :", fi_Save( FIF_JPEG, rescale, IMAGES_OUT + "rescale.jpg", JPEG_DEFAULT )

   im2 := fi_Clone( im )
   ? "Adjust Gamma ?   :", fi_AdjustGamma( im2, 3.0 )
   ? "Save JPG ?       :", fi_Save( FIF_JPEG, im2, IMAGES_OUT + "adjgamma.jpg", JPEG_DEFAULT )

   im2 := fi_Clone( im )
   ? "Adjust Brightness:", fi_AdjustBrightness( im2, - 30 )
   ? "Save JPG ?       :", fi_Save( FIF_JPEG, im2, IMAGES_OUT + "adjbrigh.jpg", JPEG_DEFAULT )

   im2 := fi_Clone( im )
   ? "Adjust Contrast ?:", fi_AdjustContrast( im2, - 30 )
   ? "Save JPG ?       :", fi_Save( FIF_JPEG, im2, IMAGES_OUT + "adjcontr.jpg", JPEG_DEFAULT )

   im2 := fi_Clone( im )
   ? "Invert ?         :", fi_Invert( im2 )
   ? "Save JPG ?       :", fi_Save( FIF_JPEG, im2, IMAGES_OUT + "invert.jpg", JPEG_DEFAULT )

   ? "Red Channel      :", hb_ValToExp( im2 := fi_GetChannel( im, FICC_RED ) )
   ? "Save JPG ?       :", fi_Save( FIF_JPEG, im2, IMAGES_OUT + "red.jpg", JPEG_DEFAULT )

   ? "Green Channel    :", hb_ValToExp( im2 := fi_GetChannel( im, FICC_GREEN ) )
   ? "Save JPG ?       :", fi_Save( FIF_JPEG, im2, IMAGES_OUT + "green.jpg", JPEG_DEFAULT )

   ? "Blue Channel     :", hb_ValToExp( im2 := fi_GetChannel( im, FICC_BLUE ) )
   ? "Save JPG ?       :", fi_Save( FIF_JPEG, im2, IMAGES_OUT + "blue.jpg", JPEG_DEFAULT )

   ? "Copy             :", hb_ValToExp( im2 := fi_Copy( im, 300, 100, 800, 200 ) )
   ? "Save JPG ?       :", fi_Save( FIF_JPEG, im2, IMAGES_OUT + "copy.jpg", JPEG_DEFAULT )

   im3 := fi_Clone( im )
   ? "Paste ?          :", fi_Paste( im3, im2, 10, 10, 70 )
   ? "Save JPG ?       :", fi_Save( FIF_JPEG, im3, IMAGES_OUT + "paste.jpg", JPEG_DEFAULT )

   ? "Allocate Bitmap  :", hb_ValToExp( im3 := fi_AllocateT( FIT_BITMAP, 320, 200, 32 ) )
   ? "Save JPG ?       :", fi_Save( FIF_JPEG, im3, IMAGES_OUT + "allocate.jpg", JPEG_DEFAULT )

   ? "Create ERROR     :"
   ? "Save GIF ?       :", fi_Save( FIF_GIF, im, IMAGES_OUT + "wrong.gif", 0 )

   bkcolor := hb_BChar( 0 ) + hb_BChar( 0 ) + hb_BChar( 205 ) + hb_BChar( 0 ) /* RGBA */
   ? fi_SetBackgroundColor( im, bkcolor )
   ? fi_GetBackgroundColor( im, @bkcolor )
   ? hb_StrToHex( bkcolor )

#if 0
   ? hb_ValToExp( fi_GetInfoHeader( im ) )
   bmpinfoheader:Buffer( fi_GetInfoHeader( im ), .T. )
   bmpinfoheader:Pointer( fi_GetInfoHeader( im ) )
   ? "Header           :", hb_ValToExp( bmpinfoheader )
   ? bmpinfoheader:SayMembers( " ", .T., .T. )

   bmpinfo:Pointer( fi_GetInfo( im ) )
   ? "Info             :", hb_ValToExp( bmpinfo )
   ? bmpinfo:SayMembers( " ", .T., .T. )
   ? Replicate( "-", 60 )

   ? ValType( bmpinfo:Devalue() )
   hb_traceLog( "bmpinfoheader", hb_ValToExp( bmpinfoheader ), ;
      infoheader:SayMembers( , .T. ), bmpinfoheader:Value(), bmpinfoheader:DeValue(), hb_DumpVar( bmpinfoheader:Array() ), hb_DumpVar( bmpinfoheader:acMembers ) )

   hb_traceLog( "line 179" )
   iccprofile:Pointer( fi_GetICCProfile( im ) )
   hb_traceLog( "line 181" )
   ? "Header           :", hb_ValToExp( iccprofile )
   hb_traceLog( "line 183" )
   ? iccprofile:SayMembers( " ", .T., .T. )

   bmpinfoheader:Reset()
#endif

   IF ! HB_ISNULL( cStr := hb_MemoRead( IMAGES_IN + "sample1.jpg" ) )
      ? "Load JPEG from memory"
      im := fi_LoadFromMemory( FIF_JPEG, cStr, JPEG_DEFAULT )

      ? "Pointer          :", hb_ValToExp( im )
      ? "Image Type       :", fi_GetImageType( im )
      ? "Save PNG ?       :", fi_Save( FIF_PNG, im, IMAGES_OUT + "sample2.png", PNG_DEFAULT  )
   ENDIF

   ? "DeInitialise"
   fi_DeInitialise()

   ?
   ? "Look at", IMAGES_OUT, "directory for output images"

   RETURN

STATIC PROCEDURE fi_Error( cFormat, cMessage )

   ? "ERROR!..."
   ? "Format :", cFormat
   ? "Message:", cMessage
   ?

   RETURN
Lá na pasta do 3.4 contrib\hbfimage\tests\test.prg
Tem um PDF ensinando a usar a DLL no SourceForge.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Harbour & conversão de imagens pra BMP

Mensagem por JoséQuintas »

Pra quem não sabe, só pra efeito de comparação, exatamente a mesma imagem em 3 formatos diferentes.

Código: Selecionar todos

13/06/2016  13:52           102.654 jpatecnologia.bmp
23/11/2016  20:13            19.126 jpatecnologia.jpg
19/12/2016  11:34             3.862 jpatecpng.png
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/
Claudio Soto
Colaborador
Colaborador
Mensagens: 566
Registrado em: 27 Ago 2012 12:31
Localização: Uruguay
Contato:

Harbour & conversão de imagens pra BMP

Mensagem por Claudio Soto »

En HMG oficial y extended existe la lib Bos Taurus para manipular imágenes, los fuentes son dos archivos uno en C y otro prg. Además tiene una doc y unos cuantos demo bastante instructivos. No es necesario agregar toda la lib basta copiar las funciones que necesiten e incluirlas en sus prg sin ningún problema por el Copyright o por cualquier adaptacion que quieran hacerle porque fui yo que la cree ni siquiera necesitan mencionar su procedencia, me es suficiente con que les sea útil.

La versión de HMG oficial soporta tanto ANSI como Unicode, la de extended solo ANSI.
Bos Taurus es la encargada de toda la manipulación de imágenes que hace HMG.
Saludos.
Dr. Claudio Soto
(Uruguay)
http://srvet.blogspot.com
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Harbour & conversão de imagens pra BMP

Mensagem por JoséQuintas »

Por acaso já sugeriu que fosse incorporada ao Harbour?
Parece interessante, principalmente por não necessitar DLL.
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/
Claudio Soto
Colaborador
Colaborador
Mensagens: 566
Registrado em: 27 Ago 2012 12:31
Localização: Uruguay
Contato:

Harbour & conversão de imagens pra BMP

Mensagem por Claudio Soto »

No José, como la diseñe pensando en HMG (Windows) nunca se me ocurrió sugerírlo. No se si el freeimage de hb es multiplataforma porque en realidad nunca lo usé. La limitante de BT es que sólo funciona en Windows.
Saludos.
Dr. Claudio Soto
(Uruguay)
http://srvet.blogspot.com
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

Harbour & conversão de imagens pra BMP

Mensagem por Itamar M. Lins Jr. »

Ola!
No se si el freeimage de hb es multiplataforma porque en realidad nunca lo usé.
What is FreeImage?

FreeImage is an Open Source library project for developers who would like to support popular graphics image formats like PNG, BMP, JPEG, TIFF and others as needed by today's multimedia applications. FreeImage is easy to use, fast, multithreading safe, compatible with all 32-bit or 64-bit versions of Windows, and cross-platform (works both with Linux and Mac OS X).
http://freeimage.sourceforge.net/

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Responder