【问题标题】:Draw on canvas from within C++ XPCOM code从 C++ XPCOM 代码中在画布上绘制
【发布时间】:2013-08-19 21:31:41
【问题描述】:

是否可以从 C++ XPCOM 附加组件中提取元素? 以前(可能很久以前)可以获取 nsIDOMCanvasRenderingContext2D 接口的对象并使用 ti 的方法 PutImageData_explicit 在画布上绘制图像。如今,nsIDOMCanvasRenderingContext2D 隐藏了所有内容,我不知道如何实现这一点。

一般来说 - 有没有办法通过网页上的插件来呈现视频(比如说从远程主机获得)?

任何建议将不胜感激。 谢谢你

【问题讨论】:

    标签: c++ video firefox-addon mozilla xpcom


    【解决方案1】:

    现在有PutImageData_explicit。但那是受保护的成员。

    • 您可以为了您的目的欺骗系统并破坏封装,例如通过派生和向下转换(现在受保护的成员都是你的)。
    • 或者硬着头皮使用PutImageData,同时又不得不乱用ImageDataErrorResult

    向下转换以获取受保护的成员:

    #include <string>
    #include <iostream>
    
    class Base {
      protected:
        std::string myName() {
          return "Base";
        }
    };
    class Derived : public Base {
      public:
        std::string myName() {
          return Base::myName();
        }
    };
    
    int main() {
      Base *base = new Base();
      Derived* derived = static_cast<Derived*>(base);
      std::cout << derived->myName() << std::endl;
      delete base;
      return 0;
    }
    

    PS:这行得通,因为这仍然适用sizeof(Base) == sizeof(Derived)。你真的不想修改大小,例如通过添加数据成员等,除非你是段错误和堆损坏的粉丝;)

    【讨论】:

    • 我最近尝试了第二种方法。出色的性能结果(我正在绘制视频帧)。您能否详细介绍一下“向上转型”以及如何实现?
    • 对不起,我的意思是向下转换,而不是向上转换。更正答案并添加了向下转换的示例
    猜你喜欢
    • 1970-01-01
    • 2013-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-16
    • 1970-01-01
    • 2020-05-25
    相关资源
    最近更新 更多