ID2D1Bitmap1::地图,什么时候可以使用它
ID2D1Bitmap1::Map, when can you use it?
所以我最近完成并转换了一个我编写的简单测试应用程序,以使用新版本的Direct2D,这意味着我基本上复制了适用于Windows 8的Direct2D Quickstart的相关部分。这起到了作用,因为我的应用程序和以前一样(只是画了一堆像素。)
以前,为了更新位图,我正在做以下操作:
for(int i = 0; i < 1000; ++i )
{
int x = rand()%600;
int y = rand()%600;
int index = 4 * ( x + ( y * 600 ) );
imageData[index] = rand()%256;
imageData[index+2] = 0;
}
D2D1_RECT_U rect2 = RectU(0,0,600,600);
pBitmap->CopyFromMemory(&rect2, imageData, 600*4);
其中imageData只是:
imageData = new byte[600*600*4];
这仍然有效,但我想,既然我在我闪亮的新ID2D1Bitmap1接口上有了这个漂亮的Map方法,我就可以摆脱CPU端的阵列,做一些类似的事情:
D2D1_MAPPED_RECT* mapped = NULL;
ThrowIfFailed( pBitmap->Map( D2D1_MAP_OPTIONS_WRITE, mapped ) );
for(int i = 0; i < 1000; ++i)
{
int x = rand()%600;
int y = rand()%600;
int index = 4 * ( x + ( y * 600 ) );
mapped->bits[index] = rand()%256;
mapped->bits[index+2] = 0;
}
ThrowIfFailed(pBitmap->Unmap());
每次使用传递给CreateBitmap的D2D1_BITMAP_PROPERTIES1中D2D1_BITMAP_OPTIONS和Map调用中D2D1_Map_OPTIONS的各种组合,使用E_INVALIDARG调用Map时都会失败。
查看D2D1_MAP_OPTIONS枚举的描述,3个选项(READ、WRITE、DISCARD)似乎都不能实际用于我使用Direct2D上下文创建的位图。。。
如何在Direct2D中获得可以映射、写入、取消映射和绘制的位图?
您的问题是映射的指针不应该是空指针。我建议根据以下内容更改您的代码:
D2D1_MAPPED_RECT映射;
ThrowIfFailed(pBitmap->Map(D2D1_Map_OPTIONS_WRITE,&mapped));
最近我深入研究了这个问题,并遇到了同样的问题。据我所知,D2D位图不能被锁定以用于CPU写入。更重要的是,你不能创建既用D2D写又用CPU读的位图。
我想读&用CPU和D2D api编写一些字节数组。但不幸的是,我不得不使用两个使用不同bitmapOptions
创建的位图。首先适用于D2D api,可以作为上下文的渲染目标
props.bitmapOptions = D2D1_BITMAP_OPTIONS_CANNOT_DRAW | D2D1_BITMAP_OPTIONS_TARGET;
第二个可以用CPU 读取
props.bitmapOptions = D2D1_BITMAP_OPTIONS_CANNOT_DRAW | D2D1_BITMAP_OPTIONS_CPU_READ;
使用场景是"将基元渲染到第一个,使用ID2D1Bitmap1::CopyFromBitmap
从第二个获取数据(使用map/unmap)"
- 是否有任何C++功能可以对地图进行排序?
- 如何使地图按值C++排序
- 我们可以使用地图而不是二叉搜索吗?
- 是否可以使C++类成为Objc类的委托
- 是否可以使一个类成为两个不同层次结构的子类?
- 是否有编译器标志可以使较新的 gcc 版本像旧版本一样构建
- C 可以使destuructor不称为班级成员和基类攻击方的灾难
- 可以使未命名的结构静态
- 是否可以使整数仅收到一个单个数字而不是两个接收输入
- C++:有哪些常规方法可以使代码更有效地用于大数字
- 是否可以使 std 容器使用默认运算符为新?
- LD_BIND_NOW可以使可执行文件运行得更慢?
- 是否可以使头文件使文本居中?- 在控制台中
- 有什么方法可以使核心忙碌等待
- 有没有一种技术可以使虚函数在所有派生类中强制重写?
- 有没有一种方法可以使全局函数/静态成员函数一次可呼出
- 是否有一种方法可以使此C 14递归模板在C 17中短
- 编写一个可以使二维数组平坦的函数
- 有哪些优化技巧可以使我的代码运行得更快
- 有没有更好的方法可以使此代码线程安全?线程局部静态似乎是一个生硬的工具