tif文件的分割

aaron6966 2011-04-19 09:10:00
为什么我的这段代码不管用?

unit Unit1;

interface

uses
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,求解,谢谢~~~~~~~~~~·
...全文
424 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
aaron6966 2011-04-21
  • 打赏
  • 举报
回复
我发现原来的代码对gif的文件可用~~~~~~~~~~~
funxu 2011-04-20
  • 打赏
  • 举报
回复
这里有个例子,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.
aaron6966 2011-04-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 bdmh 的回复:]
那很有可能你的文件不符合规定
[/Quote]
需要怎样的文件呢?
bdmh 2011-04-20
  • 打赏
  • 举报
回复
那很有可能你的文件不符合规定
aaron6966 2011-04-20
  • 打赏
  • 举报
回复
有人吗?帮帮忙

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧