C++Builder 程序员博客
19 Nov
CxImage控件打开GIF图片后怎么显示,我现在用这个方法显示,只能显示1帧
CxImage img;
img.Draw(Image1->Canvas->Handle,0,0);
如果我想用一个滚动条拖动来显示其中的每一帧,有什么办法.(在Image中显示,或其它也行)
另个打开图片后怎么让它自己拉伸(或缩放)到Image的大小.
我记得以前每次提到CxImage,接下来一般会问怎么装CxImage,怎么会编译不过等等,楼主还是比较强啊,一下就搞定啦:-)
下面是用CSpinEdit1(TCSpinEdit对象,在Sample页)来在Image1(TImage)中显示其中的每一帧,
打开图片后调整Image1的大小来适应图片。如果要拉伸(或缩放)到Image的大小,可以把
img.Draw(Image1->Canvas->Handle);这句改成:img.Draw2(Image1->Canvas->Handle,Image1->ClientRect);
AnsiString g_strFileName; void TForm1::Load(int Page) { if(!FileExists(g_strFileName))return; CxImage img; img.SetFrame(Page); try{ AnsiString Ext = ExtractFileExt(g_strFileName); // 打开多帧图片,支持GIF,ICO,TIF if(SameText(".GIF",Ext)) img.Load(g_strFileName.c_str(),CXIMAGE_FORMAT_GIF); else if(SameText(".ICO",Ext)) img.Load(g_strFileName.c_str(),CXIMAGE_FORMAT_ICO); else img.Load(g_strFileName.c_str(),CXIMAGE_FORMAT_TIF); } catch(…){;} if(img.IsValid()) { CSpinEdit1->MinValue=1; //依据图像帧数设置CSpinEdit属性 CSpinEdit1->MaxValue=img.GetNumFrames(); CSpinEdit1->Value = Page+1; //第Page帧(Page==0表示第一帧) Image1->Width = img.GetWidth(); Image1->Height = img.GetHeight(); Image1->Canvas->FillRect(Image1->ClientRect); img.Draw(Image1->Canvas->Handle); img.Destroy(); } } void __fastcall TForm1::Button1Click(TObject *Sender) { if(OpenDialog1->Execute()) { g_strFileName=OpenDialog1->FileName; Load(0); } } //————————————————————————— void __fastcall TForm1::CSpinEdit1Change(TObject *Sender) { Load(CSpinEdit1->Value-1); } //—————————————————————————
upWaiting4you
谢谢,我晚上试试..安装编译那些我也是找了一晚上才搞好的
呵呵,比较厉害,
我来接点分!!!
我做到项目基本上是朴素型,没有那么多的图片。呵呵
不是不朴素,而是要处理图片..
可以,但是速度太慢了.有办法快一点吗