百度首页 | 百度空间
 
查看文章
 
SWFBitmap对象不能被return??
2008年06月27日 星期五 上午 09:07

最近想做一个SWF演示图片的程序,已经实现了第一个演示功能的效果:
http://www.singlestudio.net.cn/photoviewer/
然后,想要把这个算法放到function里,这样,多种算法可以封装到其它的文件中,不至于使主程序文件臃肿。
一开始,我是将所有关于
SWFBitmap(用于读取图片)
SWFShape(将图片嵌入指定区域)
SWFSprite(创建一个相当于FLASH软件中的影片的角色)
的代码都放在函数getit中(也就是下面代码中,get_b(),get_s(),get_p()的堆砌)。
但是不成功。
最后,抱着试试看的态度,将它们分开了。
分离SWFSprite成功;
分离SWFShape成功;
分离SWFBitmap[COLOR=red]失败[/COLOR]。

难道这个SWFBitmap不能用return来返回么?

欢迎大家讨论

<?php
function get_p($s)
{
   $p=new SWFSprite();
//   $p->add(new SWFAction("_visible=false;"));

   $b = new SWFButton();    //TITLE BAR
   $b->addShape($s,SWFBUTTON_UP|SWFBUTTON_HIT|SWFBUTTON_DOWN|SWFBUTTON_OVER);
   $b->addAction(new SWFAction("startdrag('',false,300,300,0,0);"), SWFBUTTON_MOUSEDOWN);
   $b->addAction(new SWFAction("stopdrag();"), SWFBUTTON_MOUSEUP);

   $i=$p->add($b);
   $i->moveto(0,0);
   $p->nextframe();

   return $p;
}
function get_s($b)
{
   $s = new SWFShape();
   $s->setLine(1, 0xff, 0x00, 0x00);
   $scale= $s->addFill($b);
   $scale->moveto(0,0);
   $width=$b->getWidth()/5;$height=$b->getHeight()/5;
   $xx=20;$yy=20;
   $xx*=$width/$b->getWidth();
   $yy*=$height/$b->getHeight();
   $scale->scaleto($xx,$yy);
   $s->setRightFill($scale);
   $s->movePenTo(0,0);
   $s->drawLine($width, 0);
   $s->drawLine(0, $height);
   $s->drawLine(-$width, 0);
   $s->drawLine(0, -$height);
   return $s;

}
function get_b()//这段代码,无法使用
{
   $mfile="xx.jpg";
   $fp=fopen($mfile,"r");
   $string=fread($fp,filesize($mfile));
   $b = new SWFBitmap($string);
   fclose($fp);
   return $b;////////////////////////这个return无效
}
/////////////////////////////////////////这段代码无法封装到函数中去
   $mfile="xx.jpg";
   $fp=fopen($mfile,"r");
   $string=fread($fp,filesize($mfile));
   $b = new SWFBitmap($string);
   fclose($fp);
///////////////////////////////////////////////////这段代码无法封装到函数中去

   $m = new SWFMovie();
   $m->setBackground(0xff, 0xff, 0xff);
   $m->setDimension(300,300);
   $m->setrate(6);

   $m->add(get_p(get_s($b)));
   $m->nextFrame();

//   $m->add(new SWFAction("stop();"));
   $m->nextFrame();

   header('Content-type: application/x-shockwave-flash');
   $m->output();
// $m->save("viewer.swf");
?>

另:

在PHP.NET找了半天,没有类似情况。
就report了一下:
http://bugs.php.net/bug.php?id=45371


类别:php+ming>flash | 添加到搜藏 | 浏览() | 评论 (3)
 
最近读者:
 
网友评论:
1
2008年06月29日 星期日 下午 03:58
而另一个直接从数据库中获得文件数据的程序则正常。

无奈。
既然另一个可以,能不能先借过来用用呢?
直接读取文件再显示还是失败。
那就借数据。
竟然成功了!
莫非是fread有什么限制,导致失败?
当初的数据,是通过fread读取,addslashes后存入GB2312的数据库的。
看来,这个应用,在没解决问题之前,只能把图片放入数据库后再操作了(图片入库,要多大的数据库啊 )
 
2
2008年07月07日 星期一 上午 08:27
$string=fread($fp,filesize($mfile));
很遗憾,不是SWFBitmap的问题,而是这个$string不能被fread多次赋值。
 
3
2008年07月07日 星期一 上午 08:39
其实,重复赋值也可以,就是不能被SWFMovie正确识别,导致output的时候失败。
那,这还是一个bug么?
 
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码:
 

     

©2008 Baidu