Página 1 de 2

Harbour & conversão de imagens pra BMP

Enviado: 19 Dez 2016 11:56
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.

Harbour & conversão de imagens pra BMP

Enviado: 19 Dez 2016 12:09
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

Harbour & conversão de imagens pra BMP

Enviado: 19 Dez 2016 13:14
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.

Harbour & conversão de imagens pra BMP

Enviado: 19 Dez 2016 15:09
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.

Harbour & conversão de imagens pra BMP

Enviado: 19 Dez 2016 15:16
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

Harbour & conversão de imagens pra BMP

Enviado: 19 Dez 2016 15:21
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...

Harbour & conversão de imagens pra BMP

Enviado: 19 Dez 2016 15:41
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.

Harbour & conversão de imagens pra BMP

Enviado: 19 Dez 2016 15:58
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

Harbour & conversão de imagens pra BMP

Enviado: 19 Dez 2016 16:09
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.

Harbour & conversão de imagens pra BMP

Enviado: 19 Dez 2016 16:29
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.

Harbour & conversão de imagens pra BMP

Enviado: 19 Dez 2016 17:45
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

Harbour & conversão de imagens pra BMP

Enviado: 01 Fev 2017 17:39
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.

Harbour & conversão de imagens pra BMP

Enviado: 01 Fev 2017 18:57
por JoséQuintas
Por acaso já sugeriu que fosse incorporada ao Harbour?
Parece interessante, principalmente por não necessitar DLL.

Harbour & conversão de imagens pra BMP

Enviado: 01 Fev 2017 19:05
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.

Harbour & conversão de imagens pra BMP

Enviado: 07 Fev 2017 13:24
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.