tif文件的分割为什么我的这段代码不管用?Delphi(Pascal) codeunit Unit1interfaceusesWindows, Messages,
tif文件的分割
为什么我的这段代码不管用?
Delphi(Pascal) codeunit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, GDIPUTIL, GDIPAPI, GDIPOBJ, ActiveX, StdCtrls;type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);var I, Count: Integer; Clsid: TClsid; Parameters: TEncoderParameters; Quality: Integer; Image: TGpImage; GUID: TGUID;begin // 打开图像文件 Image := TGpImage.Create('E:\test\test.tif'); try // 获取图像所有帧维度的GUID,这里我们只取第一个 Image.GetFrameDimensionsList(@GUID, 1); // 通过获取维度的GUID,取得图像的帧(页)数量 Count := Image.GetFrameCount(GUID); // 下面设置自定义的编码参数,这里为1个参数 Parameters.Count := 1; // 设置参数唯一标志的GUID,这里为编码品质 Parameters.Parameter[0].Guid := EncoderQuality; // 设置参数值的数据类型为长整型 Parameters.Parameter[0].Type_ := EncoderParameterValueTypeLong; Parameters.Parameter[0].NumberOfValues := 1; // 设置参数的值:品质等级,最高为100,图像文件大小与品质成正比 Quality := 100; Parameters.Parameter[0].Value := @Quality; // 获取图像格式JPEG编码器的ClsID GetEncoderClsid('image/jpeg', Clsid); // 选择图像的各个帧为当前帧,并依次保存为jpg文件 for I := 0 to Count - 1 do begin Image.SelectActiveFrame(GUID, I); Image.Save('Hb' + IntToStr(I) + '.jpg', Clsid, @Parameters); end; finally Image.Free; end;end;end.
网上找到的一个例子,就把图像文件的路径改了一下,程序没出错,但也没有将文件分割,就是什么都没有输出,要分割的图像文件是我用TiffToy将4张jpg的图片合出来的~~~~~~~~~~~~~跟踪到Count := Image.GetFrameCount(GUID);的时候,发现Count := Image.GetFrameCount(GUID);的值为0,求解,谢谢~~~~~~~~~~·
[解决办法]那很有可能你的文件不符合规定
[解决办法]这里有个例子,LZ可以研究下
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
ListBox1: TListBox;
OpenDialog1: TOpenDialog;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormPaint(Sender: TObject);
procedure ListBox1Click(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses GDIPOBJ, GDIPAPI;
var
img: TGPImage;
GifFrame, GifFrameCount: Word;
procedure TForm1.FormCreate(Sender: TObject);
begin
OpenDialog1.Filter := 'GIF 文件|*.gif';
img := TGPImage.Create;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
img.Free;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
DimensionsCount: Integer;
DimensionsIDs: PGUID;
i: Integer;
type
ArrDimensions = array of TGUID;
begin
if not OpenDialog1.Execute then Exit;
img.Free;
img := TGPImage.Create(OpenDialog1.FileName);
{获取 Gif 总帧数}
DimensionsCount := img.GetFrameDimensionsCount;
GetMem(DimensionsIDs, DimensionsCount * SizeOf(TGUID));
img.GetFrameDimensionsList(DimensionsIDs, DimensionsCount);
GifFrameCount := img.GetFrameCount(ArrDimensions(DimensionsIDs)[0]);
FreeMem(DimensionsIDs);
Text := Format('共有 %d 帧', [GifFrameCount]);
{显示帧列表}
ListBox1.Clear;
for i := 1 to GifFrameCount do
ListBox1.Items.Add(Format('第 %d 帧', [i]));
Repaint;
end;
procedure TForm1.FormPaint(Sender: TObject);
var
g: TGPGraphics;
begin
g := TGPGraphics.Create(Canvas.Handle);
g.DrawImage(img, ListBox1.Width + 10, 10, img.GetWidth, img.GetHeight);
g.Free;
end;
procedure TForm1.ListBox1Click(Sender: TObject);
begin
GifFrame := ListBox1.ItemIndex;
img.SelectActiveFrame(FrameDimensionTime, GifFrame);
Repaint;
end;
end.