Page 1 of 1
Selecciona imagen de un TIFF
Posted: Mon Oct 19, 2015 3:16 pm
by quique
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?
Re: Selecciona imagen de un TIFF
Posted: Mon Oct 19, 2015 4:36 pm
by karinha
Mira se ayuda:
Code: Select all
#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
Re: Selecciona imagen de un TIFF
Posted: Mon Oct 19, 2015 4:45 pm
by quique
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.
Re: Selecciona imagen de un TIFF
Posted: Mon Oct 19, 2015 4:51 pm
by karinha
Re: Selecciona imagen de un TIFF
Posted: Mon Oct 19, 2015 5:21 pm
by quique
Gracias de nuevo Karinha, pero no solucionan el problema de seleccionar la imágen dentro del tiff
Re: Selecciona imagen de un TIFF
Posted: Mon Oct 19, 2015 6:48 pm
by karinha
Muestra un ejemplo autocontenido porfa. salu2.
Re: Selecciona imagen de un TIFF
Posted: Mon Oct 19, 2015 6:59 pm
by quique
Code: Select all
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
Re: Selecciona imagen de un TIFF
Posted: Mon Oct 19, 2015 8:12 pm
by mastintin
quique wrote:Code: Select all
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
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
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 )
Re: Selecciona imagen de un TIFF
Posted: Tue Oct 20, 2015 12:26 am
by quique
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
#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)
Re: Selecciona imagen de un TIFF
Posted: Tue Oct 20, 2015 5:53 am
by mastintin
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
Re: Selecciona imagen de un TIFF
Posted: Tue Oct 20, 2015 3:18 pm
by quique
Mastintin, gracias por la respuesta