Que tal señores alguien a trabajado con Tiff multipaginas,he leido el tema de escafandra para leer tiff con gdi pero solo lee la primera imagen como hago para que lea las otras?
Tiff multipage
Comenzado por
luvac
, jun 10 2014 10:24
2 respuestas en este tema
#1
Escrito 10 junio 2014 - 10:24
#3
Escrito 11 junio 2014 - 05:41
Prueba con esta función que acabo de escribir:
Ejemplo de uso:
Saludos.
delphi
type function GdiplusStartup(var GdiToken: DWORD; Startup, Output: PBYTE): DWORD; stdcall external 'gdiplus'; function GdipCreateBitmapFromFile(lpFileName: PWCHAR; var GBitmap: THANDLE): DWORD; stdcall external 'gdiplus'; function GdipCreateHBITMAPFromBitmap(GBitmap: THANDLE; var hBitmap: HBITMAP; BKColor: DWORD): DWORD; stdcall external 'gdiplus'; procedure GdiplusShutdown(GdiToken: DWORD); stdcall external 'gdiplus'; function GdipImageGetFrameDimensionsList(image: THANDLE; var dimensionIDs: TGUID; count: DWORD): DWORD; stdcall external 'gdiplus'; function GdipImageGetFrameCount(image: THANDLE; var dimensionID: TGUID; var count: DWORD): DWORD; stdcall external 'gdiplus'; function GdipImageSelectActiveFrame(image: THANDLE; var dimensionID: TGUID; frameIndex: DWORD): DWORD; stdcall external 'gdiplus'; implementation function CreateHBITMAPFromFilePage(cFileName: PCHAR; Index: DWORD): HBITMAP; var FileName: array of WCHAR; size: integer; gdiplusToken: DWORD; GdiPlusStartupInput: array[0..2] of int64; GBitmap: THANDLE; DimensionID: TGUID; Frames: DWORD; begin Result:= 0; // Pasamos a Unicode SetLength(FileName, lstrlen(cFileName)+1); size:= lstrlen(cFileName)*sizeof(WCHAR)+1; MultiByteToWideChar(CP_ACP, 0, cFileName, -1, @FileName[0], size); // Inicializamos GDI+. GdiPlusStartupInput[0]:= 1; GdiPlusStartupInput[1]:= 0; if GdiplusStartup(gdiplusToken, @GdiPlusStartupInput, nil) = 0 then begin GdipCreateBitmapFromFile(PWCHAR(FileName), GBitmap); GdipImageGetFrameDimensionsList(GBitmap, dimensionID, 1); GdipImageGetFrameCount(GBitmap, dimensionID, Frames); GdipImageSelectActiveFrame(GBitmap, dimensionID, Index mod Frames); GdipCreateHBITMAPFromBitmap(GBitmap, Result, 0); // Cerramos GDI+ GdiplusShutdown(gdiplusToken); end; end;
Ejemplo de uso:
delphi
Image1.Picture.Bitmap.Handle:= CreateHBITMAPFromFilePage('Fax1.TIF', 4);
Saludos.