首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

tif文件的分割,该怎么解决

2012-03-22 
tif文件的分割为什么我的这段代码不管用?Delphi(Pascal) codeunit Unit1interfaceusesWindows, Messages,

tif文件的分割
为什么我的这段代码不管用?

Delphi(Pascal) code
unit 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.

热点排行