FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Selecciona imagen de un TIFF
Posts: 408
Joined: Sun Aug 13, 2006 05:38 AM
Selecciona imagen de un TIFF
Posted: Mon Oct 19, 2015 03:16 PM

Hola a todos, tengo esta linea que lee un archivo tiff con 5 imágenes:

@2,2 IMAGE oImageInicia OF oWnd FILE "d:\quiquesoft\SiCredit\Captura2\Imagenes3\111485901.tiff" SCROLL

¿Es posible seleccionar que imágen es la que quierno mostrar?

Saludos

Quique
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Selecciona imagen de un TIFF
Posted: Mon Oct 19, 2015 04:36 PM
Mira se ayuda:

Code (fw): Select all Collapse
#include 'fivewin.ch'

#define OFN_PATHMUSTEXIST            0x00000800
#define OFN_NOCHANGEDIR              0x00000008
#define OFN_ALLOWMULTISELECT         0x00000200
#define OFN_EXPLORER                 0x00080000     // new look commdlg
#define OFN_LONGNAMES                0x00200000     // force long names for 3.x modules
#define OFN_ENABLESIZING             0x00800000
#define OFN_HIDEREADONLY             0x00000004     // Oculta a caixa de seleção Somente leitura.
#define OFN_NONETWORKBUTTON          0x20000        // Desabilita o botão [ REDE ] da Dlg

function aGetFiles( cMask, cTitle, nDefaultMask, cInitDir )

   local cSelect, nAt, aFiles := {}
   /*
   local nFlags   := nOr( OFN_PATHMUSTEXIST , OFN_NOCHANGEDIR , ;
                     OFN_ALLOWMULTISELECT , OFN_EXPLORER , ;
                     OFN_LONGNAMES, OFN_ALLOWMULTISELECT )
   */
   local nFlags   := nOr( OFN_PATHMUSTEXIST, OFN_NOCHANGEDIR, OFN_ALLOWMULTISELECT, ;
                          OFN_LONGNAMES, OFN_NONETWORKBUTTON )

   SKINBUTTONS()

   //cSelect  := cGetFile( cMask, cTitle, nDefaultMask, cInitDir, .f., .t., nFlags )
   cSelect := cGetFile( "Bitmap (*.bmp)| *.bmp|"+      ;
                        "DIB   (*.dib)| *.dib|" +      ;
                        "PCX   (*.pcx)| *.pcx|" +      ;
                        "JPEG  (*.jpg)| *.jpg|" +      ;
                        "GIF   (*.gif)| *.gif|" +      ;
                        "TARGA (*.tga)| *.tga|" +      ;
                        "RLE   (*.rle)| *.rle|" +      ;
                        "Todos os Arquivos (*.*)|*.*|" ;
                        ,"Selecione a Foto Desejada",1,,.F.,, nFlags )

   cSelect  := Left( cSelect, At( Chr( 0 ) + Chr( 0 ), cSelect ) - 1 )

   if ! Empty( cSelect )
      cSelect  := StrTran( cSelect, Chr( 0 ), "," )
      aFiles  := hb_aTokens( cSelect, "," )
      if Len( aFiles ) > 1
         for nAt := 2 TO Len( aFiles )
            aFiles[ nAt ] := aFiles[ 1 ] + "\" + aFiles[ nAt ]
         next nAt
         ADel( aFiles, 1 )
         ASize( aFiles, Len( aFiles ) - 1 )
      endif
   endif

return aFiles


João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 408
Joined: Sun Aug 13, 2006 05:38 AM
Re: Selecciona imagen de un TIFF
Posted: Mon Oct 19, 2015 04:45 PM

Gracias Karinha, pero cgetfile() me ayuda a seleccionar un archivo, lo que necesito es poder seleccionar la imágen dentro del archivo que ya tengo seleccionado, en el ejemplo que puse el archivo tiff tiene 5 imágenes, y lo que necesito es poder seleccionar la segunda o tercera.

Saludos

Quique
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Selecciona imagen de un TIFF
Posted: Mon Oct 19, 2015 04:51 PM
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 408
Joined: Sun Aug 13, 2006 05:38 AM
Re: Selecciona imagen de un TIFF
Posted: Mon Oct 19, 2015 05:21 PM

Gracias de nuevo Karinha, pero no solucionan el problema de seleccionar la imágen dentro del tiff

Saludos

Quique
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Selecciona imagen de un TIFF
Posted: Mon Oct 19, 2015 06:48 PM

Muestra un ejemplo autocontenido porfa. salu2.

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 408
Joined: Sun Aug 13, 2006 05:38 AM
Re: Selecciona imagen de un TIFF
Posted: Mon Oct 19, 2015 06:59 PM
Code (fw): Select all Collapse
  DEFINE WINDOW oWnd FROM 0, 0 TO 24, 80  

  @2,2 IMAGE oImageInicia OF oWnd FILE "111485901.tiff" SCROLL

  ACTIVATE WINDOW oWnd MAXIMIZED


Lo que hace falta es poder decirle que en lugar de mostrar la primera imágen, muestre la segunda
Saludos

Quique
Posts: 1516
Joined: Thu May 27, 2010 02:06 PM
Re: Selecciona imagen de un TIFF
Posted: Mon Oct 19, 2015 08:12 PM
quique wrote:
Code (fw): Select all Collapse
  DEFINE WINDOW oWnd FROM 0, 0 TO 24, 80  

  @2,2 IMAGE oImageInicia OF oWnd FILE "111485901.tiff" SCROLL

  ACTIVATE WINDOW oWnd MAXIMIZED


Lo que hace falta es poder decirle que en lugar de mostrar la primera imágen, muestre la segunda


¿ Que version de fwh usas ? . Lo pregunto por la posibilidad de usar gdi+ para resolver el problema .
Code (fw): Select all Collapse
HB_FUNC( GDIPLUSIMGGETFRAME )
{
    Bitmap * gifImage = ( Bitmap * ) hb_parnl( 1 ); 
  int index = hb_parni(2) ;
  
  UINT nFrame = gifImage->GetFrameDimensionsCount();
  GUID* pDimensionIDs = (GUID*)malloc(sizeof(GUID)*nFrame);
  gifImage->GetFrameDimensionsList(pDimensionIDs, nFrame);
  gifImage->SelectActiveFrame( &pDimensionIDs[0] , index );   
  
 int nWidth  =  gifImage->GetWidth() ;
 int nHeight =  gifImage->GetHeight() ; 
 
  Bitmap * frameImage = new Bitmap( nWidth, nHeight  );
  Graphics * gr = new Graphics( frameImage );

  gr->DrawImage(gifImage, 0, 0, nWidth, nHeight);
  delete gr ;
  
  hb_retnl( ( HB_LONG ) frameImage ); 
  
  }


Este código no está testado pero debería funcionar ...
partiendo de un hBitmap de gdi+ , y un numero de imagen ( empieza en cero ) devuelve un hbitmap gdi+ de la imagen del frame .
seria algo así :

Code (fw): Select all Collapse
local hbitmap
local obmp := tgdiplus():new( "archivo.tif")
local hFrame:=  GDIPLUSIMGGETFRAME(obmp:hbmp, 2)
       GDIPLUSIMAGEDISPOSE(obmp:hbmp)
        hbitmap:= GDIP_GETHBITMAP( hFrame )
        .......... usar la imagen ......
        
       GDIPLUSIMAGEDISPOSE( hFrame )
Posts: 408
Joined: Sun Aug 13, 2006 05:38 AM
Re: Selecciona imagen de un TIFF
Posted: Tue Oct 20, 2015 12:26 AM
mastintin gracias, no supe como compilarlo.

Tengo FW 12.04 lo que hice fue incluir el código C copiando la ídea de otro fuente de los que incluye FW.

Code (fw): Select all Collapse
#pragma BEGINDUMP
#include <windows.h>
#include <winuser.h>
#include <wingdi.h>
#include "hbapi.h"
HB_FUNC( GDIPLUSIMGGETFRAME )
{
    Bitmap * gifImage = ( Bitmap * ) hb_parnl( 1 );
.
.
.
.
  hb_retnl( ( HB_LONG ) frameImage );

  }
#pragma ENDDUMP


pero me marca varios errores comenzando con estos:

Error E2451 D:\\quiquesoft\\SiCredit\\Digital3\\prg\\Digital.prg 1716: Undefined symbol 'Bitmap' in function HB_FUN_GDIPLUSIMGGETFRAME
Error E2451 D:\\quiquesoft\\SiCredit\\Digital3\\prg\\Digital.prg 1716: Undefined symbol 'GIFiMAGE' in function HB_FUN_GDIPLUSIMGGETFRAME

La línea 1716 es

Bitmap * gifImage = ( Bitmap * ) hb_parnl( 1 );

o sea, la primera línea de la función

(esto es al compilar C, porque todavía falta ver que le atine a la insercción del código FW)
Saludos

Quique
Posts: 1516
Joined: Thu May 27, 2010 02:06 PM
Re: Selecciona imagen de un TIFF
Posted: Tue Oct 20, 2015 05:53 AM

Te falla porque es código C++ y no C y porque tienes que incluir la librería gdi+ al archivo de compilación. De todas formas con esa versión de fwh no podrás hacerlo pues te faltan el resto de las funciones fwh para gdi+ , las que inicializan el sistema gdi+ , carga ficheros de imagen , los libera , etc .
Lo siento :-(

Posts: 408
Joined: Sun Aug 13, 2006 05:38 AM
Re: Selecciona imagen de un TIFF
Posted: Tue Oct 20, 2015 03:18 PM

Mastintin, gracias por la respuesta

Saludos

Quique

Continue the discussion