如何获取flash动画的长和宽?

eycd6842 2003-09-15 10:28:10
上传一swf文件,如何知道该flash动画的长和宽?
...全文
134 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangking 2003-09-15
  • 打赏
  • 举报
回复
获取Flash宽 高的类,顺便上传Flash swf文件格式

using System;
using System.IO;
using System.Text;
/// <summary>
/// 操作Flash
/// </summary>
public class FlashCtrl
{

public struct FlashRect
{
public int XLength;
public int YLength;
}
public FlashCtrl()
{

}
/// <summary>
/// 获取Flash(Swf)的矩形范围
/// </summary>
/// <param name="path">Flash(Swf)文件的物理路径</param>
/// <returns>矩形范围</returns>
public static FlashRect GetRect(string path)
{
FlashRect flashRect=new FlashRect();
System.IO.FileStream fs=new FileStream(path,FileMode.Open);
BinaryReader br=new BinaryReader(fs);
//开始取得nBit
fs.Seek(8,SeekOrigin.Begin);
int nBit=(int)br.ReadByte();
nBit=nBit>>3;
//从第8个字节读取
fs.Seek(8,SeekOrigin.Begin);
byte[] RetByteArray=br.ReadBytes( (5+nBit*4)/8+1 );
fs.Close();
br.Close();
string Ret="";
for (int i=0;i<RetByteArray.Length;i++)
{
Ret+=Convert.ToString(RetByteArray[i],2).PadLeft(8,'0');
}
//去除5为长度位
Ret=Ret.Remove(0,5);
int[] RetIntArray=new int[4];
//每8位截取一次
for(int j=0;j<4;j++)
{
RetIntArray[j]=Convert.ToInt32(Ret.Substring(j*nBit,nBit),2 );
}
//(x2-x1)/20
flashRect.XLength=(RetIntArray[1]-RetIntArray[0])/20;
//(y2-y1)/20
flashRect.YLength=(RetIntArray[3]-RetIntArray[2])/20;
return flashRect;
}
}
zhangking 2003-09-15
  • 打赏
  • 举报
回复
获取Flash宽 高的类,顺便上传Flash swf文件格式

using System;
using System.IO;
using System.Text;
/// <summary>
/// 操作Flash
/// </summary>
public class FlashCtrl
{

public struct FlashRect
{
public int XLength;
public int YLength;
}
public FlashCtrl()
{

}
/// <summary>
/// 获取Flash(Swf)的矩形范围
/// </summary>
/// <param name="path">Flash(Swf)文件的物理路径</param>
/// <returns>矩形范围</returns>
public static FlashRect GetRect(string path)
{
FlashRect flashRect=new FlashRect();
System.IO.FileStream fs=new FileStream(path,FileMode.Open);
BinaryReader br=new BinaryReader(fs);
//开始取得nBit
fs.Seek(8,SeekOrigin.Begin);
int nBit=(int)br.ReadByte();
nBit=nBit>>3;
//从第8个字节读取
fs.Seek(8,SeekOrigin.Begin);
byte[] RetByteArray=br.ReadBytes( (5+nBit*4)/8+1 );
fs.Close();
br.Close();
string Ret="";
for (int i=0;i<RetByteArray.Length;i++)
{
Ret+=Convert.ToString(RetByteArray[i],2).PadLeft(8,'0');
}
//去除5为长度位
Ret=Ret.Remove(0,5);
int[] RetIntArray=new int[4];
//每8位截取一次
for(int j=0;j<4;j++)
{
RetIntArray[j]=Convert.ToInt32(Ret.Substring(j*nBit,nBit),2 );
}
//(x2-x1)/20
flashRect.XLength=(RetIntArray[1]-RetIntArray[0])/20;
//(y2-y1)/20
flashRect.YLength=(RetIntArray[3]-RetIntArray[2])/20;
return flashRect;
}
}
bubuy 2003-09-15
  • 打赏
  • 举报
回复
不知道用fso读它文件信息可以不?
kwq_cn 2003-09-15
  • 打赏
  • 举报
回复
flash有两种存放格式,一种是不压缩的,另外一种是压缩过的(zlib),后者要解压缩后才能得到原始存放数据的那4个字节,然后按未压缩的方法求得长宽。具体算法可到网络上找
sw47 2003-09-15
  • 打赏
  • 举报
回复
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>无标题文档</title>
</head>

<body>
<input onClick="alert(xx.offsetWidth+';'+xx.offsetHeight)">
<object id="xx" style="visibility:hidden" classid="clsid:D27CDB6E-AE6D-11cf-9B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0">
<param name="movie" value="banner.swf">
<param name="quality" value="high">
<embed src="banner.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="480" height="60"></embed></object>
</body>
</html>

87,907

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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