Page 1 of 1

Classe FreeImage de xharbour + fwh

Posted: Mon Dec 11, 2006 7:34 pm
by Rossine
Olá,

No xharbour existe uma classe para acessar a freeimage.dll, só que, quando incluo o "freeimage.ch", como no programa abaixo é gerado os erros abaixo:

#include "fivewin.ch"
#include "FreeImage.ch"
#include "common.ch"

function Main()

local oWnd, oBmp

DEFINE WINDOW oWnd TITLE "SaveToBmp"

ACTIVATE WINDOW oWnd

return nil



Application
===========
Path and name: C:\teste\imag8.exe (32 bits)
Size: 1,565,184 bytes
Error occurred at: 12/11/06, 17:30:40
Error description: Error BASE/2023 Argument error: SizeOfCStructure
Args:
[ 1] = A { ... }

Stack Calls
===========
Called from: => HB_SIZEOFCSTRUCTURE(0)
Called from: cstruct.prg => __ACTIVESTRUCTURE(150)
Called from: => __INIT_BITMAPINFOHEADER$(0)

Isto é alguma incompatibilidade ? Como corrigir isto ?

Obrigado,

Rossine.

Posted: Mon Dec 11, 2006 10:49 pm
by Silvio
wich image class use ?

Posted: Tue Dec 12, 2006 11:10 am
by Rossine
Hello Silvio,

I am trying to use the class \xharbour\contrib\freeimage

Best regards.

Posted: Tue Dec 12, 2006 7:34 pm
by Rossine
Olá,

Esta classe realmente é muito boa e tem várias funções para se trabalhar com a freeimage, mas não consigo usá-la junto com FWH.

Veja um exemplo abaixo:

Code: Select all

/*
 * $Id: fitest.prg,v 1.3 2006/05/12 22:55:51 lculik Exp $
 */

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

#include "FreeImage.ch"
#include "common.ch"

#define IMAGES_IN  "images_in/"
#define IMAGES_OUT "images_out/"

PROCEDURE Main()

   LOCAL im, clone, rotated, rotatedEx, rescale, im2, im3
   LOCAL centerX, centerY, width, height, appo
   LOCAL bmpinfoheader IS BITMAPINFOHEADER
   LOCAL bmpinfo       IS BITMAPINFO
   LOCAL bkcolor       IS RGBQUAD
   LOCAL iccprofile    IS FIICCPROFILE

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

*set console OFF
*set printer ON

 altd()
   // Check output directory
   IF !ISDirectory( IMAGES_OUT )
      DirMake( IMAGES_OUT )
   ENDIF

   ? "Initialise"
   fi_Initialise()
   //---------------------------//

   ? "Set Error Message:", fi_SetOutPutMessage( @fi_Error() )
   //? "Set Error Message:", fi_SetOutPutMessage( NIL )

   ? "Version          :", fi_GetVersion()
   ? "Copyright        :", fi_GetCopyrightMessage()
   ? "File type        :", fi_GetFileType( IMAGES_IN + "xharbour.jpg" )
   ? "Load JPEG"
   im := fi_Load( FIF_JPEG, IMAGES_IN + "xharbour.jpg", JPEG_DEFAULT )

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

   ? "Pointer          :", ValToPrg( 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 + "xharbour.bmp", BMP_DEFAULT  )
   ? "Save JPG ?       :", fi_Save( FIF_JPEG, im, IMAGES_OUT + "xharbour.jpg", JPEG_DEFAULT )
   ? "Save PNG ?       :", fi_Save( FIF_PNG , im, IMAGES_OUT + "xharbour.png", PNG_DEFAULT  )

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

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

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

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

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

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

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

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

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

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

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

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

   ? "Copy             :", ValToPrg( 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 )
   fi_Unload( im2 )
   fi_Unload( im3 )

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

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

   //? ValToPrg( fi_GetInfoHeader( im ) )
   //bmpinfoheader:Buffer( fi_GetInfoHeader( im ), TRUE )
   bmpinfoheader:Pointer( fi_GetInfoHeader( im ) )
   ? "Header           :", ValToPrg( bmpinfoheader )
   ? bmpinfoheader:SayMembers(" ", .t., .t.)

   bmpinfo:Pointer( fi_GetInfo( im ) )
   ? "Info           :", ValToPrg( bmpinfo )
   ? bmpinfo:SayMembers(" ", .t., .t.)
   ? "-----------------------------------------------------"
   ? ValType( bmpinfo:Devalue() )
   //Tracelog( "bmpinfoheader", ValToPrg( bmpinfoheader ), ;
   //          bmpinfoheader:SayMembers(, .t.), bmpinfoheader:Value(), bmpinfoheader:DeValue(), hb_dumpvar( bmpinfoheader:Array() ), hb_dumpvar( bmpinfoheader:acMembers ) )

   //appo := bkcolor:Value()
   ? bkcolor:Pointer( fi_GetBackgroundColor( im ) )
   //? fi_GetBackgroundColor( im, @bkcolor:Value() )
   //bkcolor:Buffer( appo )
   ? bkcolor:SayMembers(" ", .t., .t.)

   bkcolor:rgbBlue := 205
   //? fi_SetBackgroundColor( im, hb_String2Pointer( bkcolor:Value() ) )
   Tracelog("linha 168")
   ? fi_SetBackgroundColor( im, bkcolor:Value() )
   Tracelog("linha 170")
   ? bkcolor:SayMembers(" ", .t., .t.)
Tracelog("linha 162")
//   ? bkcolor:Pointer( fi_GetBackgroundColor( im ) )
   //? fi_GetBackgroundColor( im, @bkcolor:Value() )
   //bkcolor:Buffer( appo )
Tracelog("linha 176")
   ? bkcolor:SayMembers(" ", .t., .t.)

Tracelog("linha 179")
   iccprofile:Pointer( fi_GetICCProfile( im ) )
   Tracelog("linha 181")
   ? "Header           :", ValToPrg( iccprofile )
   Tracelog("linha 183")
   ? iccprofile:SayMembers(" ", .t., .t.)

   //bmpinfoheader:Reset()
   //appo := NIL
   //bmpinfoheader := NIL
   //hb_GCAll( .T. )

   ? "Unload images from memory"
   fi_Unload( im )
   fi_Unload( clone )


   //---------------------------//
   ? "DeInitialise"
   fi_Deinitialise()

   ?
   ? "Look at " + IMAGES_OUT + " folder for output images"
   ?

*set printer OFF
*set console ON

RETURN

PROCEDURE fi_Error( cFormat, cMessage )
   ? "ERROR!..."
   ? "Format  : ", cFormat
   ? "Message : ", cMessage
return 
Alguém poderia me ajudar ? :cry:

Obrigado,

Rossine.

Posted: Wed Dec 13, 2006 12:57 am
by Silvio
perhaps in dos run but in windows there are some problems
I use image from emg