Selecciona imagen de un TIFF

Selecciona imagen de un TIFF

Postby quique » Mon Oct 19, 2015 3: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
User avatar
quique
 
Posts: 408
Joined: Sun Aug 13, 2006 5:38 am

Re: Selecciona imagen de un TIFF

Postby karinha » Mon Oct 19, 2015 4:36 pm

Mira se ayuda:

Code: Select all  Expand view

#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
User avatar
karinha
 
Posts: 7804
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Selecciona imagen de un TIFF

Postby quique » Mon Oct 19, 2015 4: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
User avatar
quique
 
Posts: 408
Joined: Sun Aug 13, 2006 5:38 am

Re: Selecciona imagen de un TIFF

Postby karinha » Mon Oct 19, 2015 4:51 pm

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7804
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Selecciona imagen de un TIFF

Postby quique » Mon Oct 19, 2015 5:21 pm

Gracias de nuevo Karinha, pero no solucionan el problema de seleccionar la imágen dentro del tiff
Saludos
Quique
User avatar
quique
 
Posts: 408
Joined: Sun Aug 13, 2006 5:38 am

Re: Selecciona imagen de un TIFF

Postby karinha » Mon Oct 19, 2015 6:48 pm

Muestra un ejemplo autocontenido porfa. salu2.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7804
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Selecciona imagen de un TIFF

Postby quique » Mon Oct 19, 2015 6:59 pm

Code: Select all  Expand view

  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
User avatar
quique
 
Posts: 408
Joined: Sun Aug 13, 2006 5:38 am

Re: Selecciona imagen de un TIFF

Postby mastintin » Mon Oct 19, 2015 8:12 pm

quique wrote:
Code: Select all  Expand view

  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: Select all  Expand view

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: Select all  Expand view

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 )
 
User avatar
mastintin
 
Posts: 1516
Joined: Thu May 27, 2010 2:06 pm

Re: Selecciona imagen de un TIFF

Postby quique » 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: Select all  Expand view

#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
User avatar
quique
 
Posts: 408
Joined: Sun Aug 13, 2006 5:38 am

Re: Selecciona imagen de un TIFF

Postby mastintin » Tue Oct 20, 2015 5: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 :-(
User avatar
mastintin
 
Posts: 1516
Joined: Thu May 27, 2010 2:06 pm

Re: Selecciona imagen de un TIFF

Postby quique » Tue Oct 20, 2015 3:18 pm

Mastintin, gracias por la respuesta
User avatar
quique
 
Posts: 408
Joined: Sun Aug 13, 2006 5:38 am


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 81 guests