使用FlasCC处理位图数据
2014-08-26 17:10
190 查看
在使用FlasCC以前,以下问题必须弄清楚:
1.FlasCC效率并没有C++高, 而且还有较大差异。 我这里测试的 大概 VC6.0编译出来的C++程序release版,比 FlasCC 快 3.5 - 4倍。 大约因为Adobe虽然号称 FlasCC可以调用C++代码, 但是没有说效率就完全和C++一样, 故 如果想要让Flash 和 C++一样快,不可能的。
2.FlasCC并没有比AS3 快太多,大约 2-3 倍的样子。 说FlasCC 效率是as 10 - 20倍的 扯蛋。
个人认为FlasCC适用以下场合:计算量大 又想实时显示的程序。
一下显示了一个 将BitmapData数据 传入C++然后处理的例子。 为方便C++中的程序直接new 了一个位图大小的空间, 然后将数据写进去。 实际上应该先malloc内存出来,把数据写进去,然后把指针地址传进去, 再C++从指针读。
主要代码: AS代码:
var imgptr:int = CModule.read32(CModule.getPublicSymbol("imageData"));
if(imgptr)
{
var byteArr:ByteArray = bmd.getPixels(bmd.rect);//
CModule.writeBytes(imgptr, bmd.width * bmd.height * 4, byteArr);//把数据写入这个地址 BitmapData.copyToByteArr 也可以
FAST_BEEPS(bmd.width, bmd.height);//FAST_BEEPS 是 SWC中
}
C 代码
extern "C" unsigned char *imageData;
unsigned char *imageData = new unsigned char[800 * 600 * 4];
void FAST_BEEPS() __attribute__((used,
annotate("as3sig:public function FAST_BEEPS(width:int, height:int):void"),
annotate("as3package:sample.beeps")));
void FAST_BEEPS()
{
AS3_GetScalarFromVar(w, width);//w h为 C++中 int变量 将AS变量转为 C++
AS3_GetScalarFromVar(h, height);
//处理数据
}
处理完了以后 AS读数据
var imgptr:int = CModule.read32(CModule.getPublicSymbol("imageData"));
if(imgptr)
{
CModule.ram.position = imgptr;
var byteArr:ByteArray = new ByteArray();
CModule.readBytes(imgptr, bmd.width * bmd.height * 4, byteArr);
byteArr.position = 0;
bmd.setPixels(bmd.rect, byteArr);
}
完
1.FlasCC效率并没有C++高, 而且还有较大差异。 我这里测试的 大概 VC6.0编译出来的C++程序release版,比 FlasCC 快 3.5 - 4倍。 大约因为Adobe虽然号称 FlasCC可以调用C++代码, 但是没有说效率就完全和C++一样, 故 如果想要让Flash 和 C++一样快,不可能的。
2.FlasCC并没有比AS3 快太多,大约 2-3 倍的样子。 说FlasCC 效率是as 10 - 20倍的 扯蛋。
个人认为FlasCC适用以下场合:计算量大 又想实时显示的程序。
一下显示了一个 将BitmapData数据 传入C++然后处理的例子。 为方便C++中的程序直接new 了一个位图大小的空间, 然后将数据写进去。 实际上应该先malloc内存出来,把数据写进去,然后把指针地址传进去, 再C++从指针读。
主要代码: AS代码:
var imgptr:int = CModule.read32(CModule.getPublicSymbol("imageData"));
if(imgptr)
{
var byteArr:ByteArray = bmd.getPixels(bmd.rect);//
CModule.writeBytes(imgptr, bmd.width * bmd.height * 4, byteArr);//把数据写入这个地址 BitmapData.copyToByteArr 也可以
FAST_BEEPS(bmd.width, bmd.height);//FAST_BEEPS 是 SWC中
}
C 代码
extern "C" unsigned char *imageData;
unsigned char *imageData = new unsigned char[800 * 600 * 4];
void FAST_BEEPS() __attribute__((used,
annotate("as3sig:public function FAST_BEEPS(width:int, height:int):void"),
annotate("as3package:sample.beeps")));
void FAST_BEEPS()
{
AS3_GetScalarFromVar(w, width);//w h为 C++中 int变量 将AS变量转为 C++
AS3_GetScalarFromVar(h, height);
//处理数据
}
处理完了以后 AS读数据
var imgptr:int = CModule.read32(CModule.getPublicSymbol("imageData"));
if(imgptr)
{
CModule.ram.position = imgptr;
var byteArr:ByteArray = new ByteArray();
CModule.readBytes(imgptr, bmd.width * bmd.height * 4, byteArr);
byteArr.position = 0;
bmd.setPixels(bmd.rect, byteArr);
}
完
相关文章推荐
- 使用GDI+位图数据扫描线处理图像的小技巧 【转】from http://blog.csdn.net/maozefa/article/details/4533770
- 使用GDI+位图数据扫描线处理图像的小技巧
- 使用GDI+位图数据扫描线处理图像的小技巧 from http://blog.csdn.net/maozefa/article/details/4533770
- 使用GDI+位图数据扫描线处理图像的小技巧
- 使用GDI+位图数据扫描线处理图像的小技巧
- SQL SERVER2000教程-第五章 处理数据 第二十节 使用GOTO进行循环求和
- 使用数据2分处理的通用分页存储过程 前半部分与后半部分数据访问时间相同,同等访问速度提高一倍
- 在GridView中处理数据不使用Data Source Controls
- 使用OWC时处理有间断的数据的方法
- SQL SERVER2000教程-第五章 处理数据 第十七节 使用CASE函数格式进行条件查询
- 使用Hibernate处理数据(Hibernate Your Data)(英语原文)
- 使用ASP.NET 2.0 DetailsView控件处理数据
- 使用XMLBeans处理XML数据和文档入门
- SQL SERVER2000教程-第五章 处理数据 第十二节 使用 TOP 和 PERCENT 限制结果集
- SQL SERVER2000教程-第五章 处理数据 第十五节 使用TRUNCATE TABLE快速删除表中的所有数据
- 跟我一起学Windows Workflow Foundation(3)-----使用If/Else活动,定制活动处理工作流,使用事件传递数据
- SQL SERVER2000教程-第五章 处理数据 第七节 使用COMPUTE和COMPUTE BY对数据进行汇总
- 使用Hibernate处理数据
- 使用数据2分处理的通用分页存储过程 前半部分与后半部分数据访问时间相同
- C#中使用byte[]数据,生成Bitmap(256色 灰度 BMP位图)源代码