gpt4 book ai didi

c++ - 在 Direct2D 中绘制部分图像

转载 作者:可可西里 更新时间:2023-11-01 09:55:16 25 4
gpt4 key购买 nike

由于 GDI+ 相当(可笑)慢,我决定迁移到 Direct2D。我在许多论坛上查找了很多主题(包括 this one ),但没有成功(这也可能是由于已经很晚的事实造成的)并且 Direct2D 文档仍然非常薄(并且令人困惑,至少对我而言).

无论如何,我有一个在 Direct2D 中打开的 .PNG 并且只想每 20 毫秒绘制一次它的一部分。

初始化D2D内容

ID2D1Factory* d2dFactory = NULL;
IWICImagingFactory* d2dWICFactory = NULL;
IWICBitmapDecoder* d2dDecoder = NULL;
IWICFormatConverter* d2dConverter = NULL;
ID2D1HwndRenderTarget* d2drender = NULL;
IWICBitmapFrameDecode* d2dBmpSrc = NULL;
ID2D1Bitmap* d2dBmp = NULL;

/* initialize all the good stuff */
HRESULT hr = D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED,
__uuidof(ID2D1Factory), NULL, (void**)&d2dFactory);

D2D1_SIZE_U size = D2D1::SizeU(rc.right - rc.left, rc.bottom - rc.top);

hr = d2dFactory->CreateHwndRenderTarget(D2D1::RenderTargetProperties(),
D2D1::HwndRenderTargetProperties(zgE->getWnd(), size), &d2drender);

hr = CoCreateInstance(CLSID_WICImagingFactory, NULL, CLSCTX_INPROC_SERVER,
__uuidof(IWICImagingFactory), (void**)(&d2dWICFactory));

hr = d2dWICFactory->CreateDecoderFromFilename(L"tile_1.png", NULL, GENERIC_READ,
WICDecodeMetadataCacheOnLoad, &d2dDecoder);

hr = d2dWICFactory->CreateFormatConverter(&d2dConverter);

hr = d2dDecoder->GetFrame(0, &d2dBmpSrc);

hr = d2dConverter->Initialize(d2dBmpSrc, GUID_WICPixelFormat32bppPBGRA,
WICBitmapDitherTypeNone, NULL, 0.f, WICBitmapPaletteTypeMedianCut);

hr = d2drender->CreateBitmapFromWicBitmap(d2dConverter, NULL, &d2dBmp);

绘图:

/* draw the image */
D2D1_RECT_F rect = D2D1::RectF(x, y, x + size.width, y + size.height);
d2drender->DrawBitmap(d2dBmp, &rect);

但是,我不能让它只绘制它的一部分,比方说 20 x 20 像素。我摆弄过 DrawBitmap() 和不同大小的 rect,但结果没有裁剪图像。

除了分层之外,还有什么方法可以做到这一点,因为我不想在每一帧都对图像进行分层

最佳答案

ID2D1RenderTarget::DrawBitmap ( http://msdn.microsoft.com/en-us/library/windows/desktop/dd371880(v=vs.85).aspx ) 最多需要 5 个参数,最后一个是源矩形。您只提供前 2 个参数,源矩形的默认设置是使用整个位图。因此,解决方案是简单地为该参数提供一个 D2D1::RectF(0, 0, 20, 20) 如果您只想从它的那部分绘制。

关于c++ - 在 Direct2D 中绘制部分图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18037443/

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