gpt4 book ai didi

c++ - Direct2D:将 ID2D1Image 转换为 ID2D1Bitmap

转载 作者:行者123 更新时间:2023-11-28 02:24:47 24 4
gpt4 key购买 nike

我正在编写一个需要修改屏幕上已有内容的程序。所以我只有一个使用 pRenderTarget->CopyFromRenderTarget 创建的 ID2D1Bitmap

我想做的是,将效果应用于该位图。效果只返回ID2D1Image,但我需要有一个ID2D1Bitmap

有办法吗?

编辑1:

ID2D1Bitmap* myBitmap //the bitmap I want to apply the effect to
ID2D1Effect* effect = NULL;
pDeviceContext->CreateEffect(CLSID_D2D1Saturation, &effect);
effect->SetValue(D2D1_SATURATION_PROP_SATURATION, 0.0f);
effect->SetInput(0, myBitmap);

ID2D1Image* pImg = NULL;
effect->GetOutput(&pImg);

如果我转换此图像,getPixelSize() 会引发访问冲突。

最佳答案

我解决了。它很脏,但可以用。

ID2D1Bitmap* convertImageToBitmap(ID2D1Image* pImg, D2D1_SIZE_U size)
{
ID2D1Image* oldTarget = NULL;
ID2D1Bitmap1* targetBitmap = NULL;

//Create a Bitmap with "D2D1_BITMAP_OPTIONS_TARGET"
D2D1_BITMAP_PROPERTIES1 bitmapProperties =
D2D1::BitmapProperties1(
D2D1_BITMAP_OPTIONS_TARGET,
D2D1::PixelFormat(DXGI_FORMAT_B8G8R8A8_UNORM, D2D1_ALPHA_MODE_PREMULTIPLIED)
);
pDeviceContext->CreateBitmap(size, 0, 0, bitmapProperties, &targetBitmap);

//Save current Target, replace by ID2D1Bitmap
pDeviceContext->GetTarget(&oldTarget);
pDeviceContext->SetTarget(targetBitmap);
//Draw Image on Target (if currently not drawing also call Begin/EndDraw)
pDeviceContext->DrawImage(pImg);

//Set previous Target
pDeviceContext->SetTarget(oldTarget);

oldTarget->Release();

return targetBitmap;
}

关于c++ - Direct2D:将 ID2D1Image 转换为 ID2D1Bitmap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31118397/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com