zoukankan      html  css  js  c++  java
  • FlasCC例子研究之bitmapdata

    bitmapdata是FlasCC官方例子02_Interop中的例子。这例子比起c++interop来说,多了一个鼠标事件监听。

    我们逐行分析一下吧。

    #include <AS3/AS3.h>
    #include <Flash++.h>

    using namespace AS3::ui;

    static const int COORDBITS = 7; // 7 bits => dim of 128
    static const int DIM = 1 << COORDBITS;

    这个函数主要是根据一个给出的offset值,返回一个计算后的值

    static int swizzleOffset(int offs)
    {
      int result = 0;
      int coordBits = COORDBITS;
      int offsHi = offs >> COORDBITS; // take the higher order bits
      int coordBits2 = COORDBITS * 2;
      while(coordBits--)
      {
        // put the lowest bit in the "lo" offset bits
        // into the highest bit of the result...
        // it'll get shifted into a lower position
        // as the loop executes
        result |= ((offs & 1) << coordBits2);
        offs >>= 1;
        result >>= 1;
        // same for the "hi" offset bits
        result |= ((offsHi & 1) << coordBits2);
        offsHi >>= 1;
        result >>= 1;
      }
      return result;
    }

    // 将一个图像的像素进行混淆
    static void swizzlePixels(unsigned *dst, unsigned *src)
    {
        int offs = DIM * DIM;

        while(offs--)
        {
            int swiz = swizzleOffset(offs);
            dst[swiz] = src[offs];
        }
    }

    //监听鼠标点击事件,然后混淆BitmapData的像素值
    static var mouseDownHandler(void *arg, var args)
    {
        flash::events::MouseEvent event = flash::events::MouseEvent(args[0]);
        flash::display::Sprite sprite = flash::display::Sprite(event->target); // the container Sprite
        flash::display::Bitmap bitmap = flash::display::Bitmap(sprite->getChildAt(0)); // Bitmap is the only child
        flash::display::BitmapData bitmapData = bitmap->bitmapData;
        // ByteArray corresponding to our ram!
        // C ptrs are equivalent to offsets into this ByteArray
        flash::utils::ByteArray ram = internal::get_ram();

        // allocate space for the pixels
        unsigned *src = new unsigned[DIM * DIM];
        unsigned *dst = new unsigned[DIM * DIM];
        // copy current pixels directly to ram
        bitmapData->copyPixelsToByteArray(bitmapData->rect, ram, src);
        // swizzle them!
        swizzlePixels(dst, src);
        // write new pixels directly from ram
        bitmapData->setPixels(bitmapData->rect, ram, dst);
        // clean up
        delete dst;
        delete src;
        return internal::_undefined;
    }

    int main()
    {
        //取得舞台
        flash::display::Stage stage = internal::get_Stage();

        //创建一个Shape
        flash::display::Shape myShape = flash::display::Shape::_new();
        flash::display::Graphics graphics = myShape->graphics;

        //绘制简单的图形 这是一个像把子一样的圆

        graphics->beginFill(0xff00ff, 0.5);
        graphics->drawCircle(64.0, 64.0, 64.0);
        graphics->endFill();
        graphics->beginFill(0xffff00, 0.5);
        graphics->drawCircle(64.0, 64.0, 40.0);
        graphics->endFill();
        graphics->beginFill(0x00ffff, 0.5);
        graphics->drawCircle(64.0, 64.0, 16.0);
        graphics->endFill();

        //创建一个BitmapData
        flash::display::BitmapData myBitmapData = flash::display::BitmapData::_new(DIM, DIM);
        //把图形绘制到这个bitmapdata上

        myBitmapData->draw(myShape);

        // 创建一个Bitmap

        flash::display::Bitmap myBitmap = flash::display::Bitmap::_new(myBitmapData);

        // 加到一个Sprite中,以便显示

        flash::display::Sprite mySprite = flash::display::Sprite::_new();

        mySprite->addChild(myBitmap);
        // 增加一个鼠标监听器
        mySprite->addEventListener("mouseDown", Function::_new(&mouseDownHandler, NULL));
        // 添加到舞台
        stage->addChild(mySprite);

        // 这个函数将会使C++与AS3进行同步,以使可以处理鼠标事件。
        AS3_GoAsync();

        // 因为运行机制的原因,这行代码是无法到达的。
        return 0;
    }

    还是上个图吧。

    image

  • 相关阅读:
    PCL配置即常见问题
    opencv2.4.9配置+VS2013
    我的项目配置问题及解决
    Java 8 函数式编程
    leecode刷题(17)-- 实现StrStr
    leecode刷题(16)-- 字符串转换整数
    leecode刷题(15)-- 验证回文字符串
    博客迁移通知
    leecode刷题(14)-- 有效的字母异位词
    leecode刷题(13) -- 字符串中的第一个唯一字符
  • 原文地址:https://www.cnblogs.com/qilinzi/p/3080980.html
Copyright © 2011-2022 走看看