@@ -188,91 +188,4 @@ namespace MDWMBlurGlassExt::AcrylicBackdrop
188188
189189 return effectBrush;
190190 }
191- static winrt::Windows::UI ::Composition::CompositionSurfaceBrush CreateNoiceSurfaceBrush (
192- const winrt::Windows::UI ::Composition::Compositor& compositor,
193- ID2D1Device* d2dDevice
194- ) try
195- {
196- winrt::Windows::UI ::Composition::CompositionGraphicsDevice graphicsDevice{ nullptr };
197- THROW_IF_FAILED (
198- compositor.as <ABI ::Windows::UI ::Composition::ICompositorInterop>()->CreateGraphicsDevice (
199- d2dDevice,
200- reinterpret_cast <ABI ::Windows::UI ::Composition::ICompositionGraphicsDevice**>(winrt::put_abi (graphicsDevice))
201- )
202- );
203- auto compositionSurface
204- {
205- graphicsDevice.CreateDrawingSurface (
206- { 256 .f , 256 .f },
207- winrt::Windows::Graphics::DirectX::DirectXPixelFormat::R16G16B16A16Float,
208- winrt::Windows::Graphics::DirectX::DirectXAlphaMode::Premultiplied
209- )
210- };
211- auto noiceBrush{ compositor.CreateSurfaceBrush (compositionSurface) };
212-
213- wil::unique_hmodule wuxcModule{ LoadLibraryExW (L" Windows.UI.Xaml.Controls.dll" , nullptr , LOAD_LIBRARY_SEARCH_SYSTEM32 | LOAD_LIBRARY_AS_DATAFILE | LOAD_LIBRARY_AS_IMAGE_RESOURCE ) };
214- THROW_LAST_ERROR_IF_NULL (wuxcModule);
215- auto resourceHandle{ FindResourceW (wuxcModule.get (), MAKEINTRESOURCE (2000 ), RT_RCDATA ) };
216- THROW_LAST_ERROR_IF_NULL (resourceHandle);
217- auto globalHandle{ LoadResource (wuxcModule.get (), resourceHandle) };
218- THROW_LAST_ERROR_IF_NULL (globalHandle);
219- auto cleanUp = wil::scope_exit ([&]
220- {
221- if (globalHandle)
222- {
223- UnlockResource (globalHandle);
224- FreeResource (globalHandle);
225- }
226- });
227- DWORD resourceSize{ SizeofResource (wuxcModule.get (), resourceHandle) };
228- THROW_LAST_ERROR_IF (resourceSize == 0 );
229- auto resourceAddress{ reinterpret_cast <PBYTE >(LockResource (globalHandle)) };
230- winrt::com_ptr<IStream> stream{ SHCreateMemStream (resourceAddress, resourceSize), winrt::take_ownership_from_abi };
231- THROW_LAST_ERROR_IF_NULL (stream);
232-
233- winrt::com_ptr<IWICImagingFactory2> wicFactory{ nullptr };
234- wicFactory.copy_from (DWM ::CDesktopManager::s_pDesktopManagerInstance->GetWICFactory ());
235- winrt::com_ptr<IWICBitmapDecoder> wicDecoder{ nullptr };
236- THROW_IF_FAILED (wicFactory->CreateDecoderFromStream (stream.get (), &GUID_VendorMicrosoft, WICDecodeMetadataCacheOnDemand, wicDecoder.put ()));
237- winrt::com_ptr<IWICBitmapFrameDecode> wicFrame{ nullptr };
238- THROW_IF_FAILED (wicDecoder->GetFrame (0 , wicFrame.put ()));
239- winrt::com_ptr<IWICFormatConverter> wicConverter{ nullptr };
240- THROW_IF_FAILED (wicFactory->CreateFormatConverter (wicConverter.put ()));
241- winrt::com_ptr<IWICPalette> wicPalette{ nullptr };
242- THROW_IF_FAILED (
243- wicConverter->Initialize (
244- wicFrame.get (),
245- GUID_WICPixelFormat32bppPBGRA,
246- WICBitmapDitherTypeNone,
247- wicPalette.get (),
248- 0 , WICBitmapPaletteTypeCustom
249- )
250- );
251- winrt::com_ptr<IWICBitmap> wicBitmap{ nullptr };
252- THROW_IF_FAILED (wicFactory->CreateBitmapFromSource (wicConverter.get (), WICBitmapCreateCacheOption::WICBitmapNoCache, wicBitmap.put ()));
253-
254- auto drawingSurfaceInterop{ compositionSurface.as <ABI ::Windows::UI ::Composition::ICompositionDrawingSurfaceInterop>() };
255- POINT offset = { 0 , 0 };
256- winrt::com_ptr<ID2D1DeviceContext> d2dContext{ nullptr };
257- THROW_IF_FAILED (
258- drawingSurfaceInterop->BeginDraw (nullptr , IID_PPV_ARGS (d2dContext.put ()), &offset)
259- );
260- d2dContext->Clear ();
261- winrt::com_ptr<ID2D1Bitmap1> d2dBitmap{ nullptr };
262- d2dContext->CreateBitmapFromWicBitmap (
263- wicBitmap.get (),
264- D2D1::BitmapProperties1 (
265- D2D1_BITMAP_OPTIONS_NONE ,
266- D2D1::PixelFormat (DXGI_FORMAT_B8G8R8A8_UNORM , D2D1_ALPHA_MODE_PREMULTIPLIED )
267- ),
268- d2dBitmap.put ()
269- );
270- d2dContext->DrawBitmap (d2dBitmap.get ());
271- THROW_IF_FAILED (
272- drawingSurfaceInterop->EndDraw ()
273- );
274-
275- return noiceBrush;
276- }
277- catch (...) { return nullptr ; }
278191}
0 commit comments