畫刷的使用方法 需要包含的檔案:<wincodec.h> 需要包含的庫: "windowscodecs.lib" 資源網址: https://docs.microsoft.com/zh-cn/windows/win32/direct2d/direct2d-brushes-overview 1.顏色——D2D_COLOR_F 結構體 D2D_COLOR_F 結構體的原型是D3DCOLORVALUE
typedef struct _D3DCOLORVALUE { float r; //紅色分量值,范圍0-1 float g; //綠色分量值,范圍0-1 float b; //藍色分量值,范圍0-1 float a; //alpha分量值(透明度),范圍0-1 } D3DCOLORVALUE;
其中,四個屬性的取值范圍是0-1,
可以通過D2D1::ColorF方法獲取顏色
D2D1::ColorF(0.0f, 0.0f, 0.0f, 1.0f); //rgba形式 D2D1::ColorF(0x000000, 1.0f); //UINT32形式 D2D1::ColorF(D2D1::ColorF::Pink, 1.0f); //Enum形式特定值
2.位圖的加載——ID2D1Bitmap
從檔案中加載位圖: 以下代碼可以看作是一個模板,除了第2步中的檔案名”filename",以及第4步中的width/height需要更改,其他的只需套用即可完成位圖ID2D1Bitmap的初始化,因此一般把它封裝成一個函式使用,
//1初始化IWICImagingFactory IWICImagingFactory *pIWICFactory; CoInitialize(NULL); CoCreateIstance( CLSID_WICImagingFactory, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pIWICFactory) ); ID2D1Bitmap *pBitmap; IWICBitmapDecoder *pDecoder; IWICBitmapFrameDecode *pSource; IWICStream *pStream; IWICFormatConverter *pConverter; IWICBitmapScaler *pScaler; //2初始化IWICBitmapDecoder pIWICFactory->CreateDecoderFromFilename( "filename", //修改為圖片的路徑名 NULL, GENERIC_READ, WICDecodeMetadataCacheOnload, &pDecoder ); //3初始化IWICBitmapFrameDecode pDecoder->GetFrame(0, &pSource);
//4初始化IWICBitmapScaler pIWICFactory->CreateBitmapScaler(&pScaler); pScaler->Initialize( pSource, width, //縮放至width寬度 height, //縮放至height高度 WICBitmapInterpolationModeCubic ); //4初始化IWICFormatConverter pIWICFactory->CreateFormatConverter(&pConverter); pConverter->Initialize( pScaler, GUID_WICPixelFormat32bppPBGRA, WICBitmapDitherTypeNone, NULL, 0.0f, WICBitmapPaletteTypeMedianCut ); //5從WIC中加載位圖 pRenderTarget->CreateBitmapFromWicBitmap( pConvert, NULL, &pBitmap ); //6釋放臨時物件 XXXXX->Release();
3.畫刷型別
單色刷——ID2D1SolidColorBrush
ID2D1SolidColorBrush *pscBrush; //創建單色畫刷 RenderTarget->CreateSolidColorBrush( D2D1::ColorF(0, 1.0f), &pscBrush );
線性漸變刷——ID2D1LinearFradientBrush
ID2D1LinearGradientBrush *plgBrush; ID2D1GradientStopCollection *pgsCollection; //創建漸變節點陣列 D2D1_FRADIENT_STOP gradientStops[2]; gradientStops[0] = {0.0f, D2D1::ColorF(0, 1.0f)}; gradientStops[1] = {1.0f, D2D1::ColorF(0xffffff, 1.0f)}; //創建漸變條(這一部分可以想象成ps中的那個漸變) RenderTarget->CreateGradientStopCollection( gradientStops, //漸變顏色點資訊 2, //漸變顏色點數量 D2D1_GAMMA_2_2, D2D1_EXTEND_MODE_CLAMP, &pGsCollection ); //創建漸變刷 RenderTarget->CreateLinearGradientBrush( LinearGradientBrushProperties( D2D1::Point2F(0, 0), //漸變線起始點(視窗坐標) D2D1::Point2F(150, 150) //漸變線終點(視窗坐標) ), pgsCollection, &plgBrush );
發散漸變刷——ID2D1RadialGradientBrush
g_pTarget->CreateRadialGradientBrush( RadialGradientBrushProperties( Point2F(20,20), //顏色中心 Point2F(0, 0), //顏色偏離中心 20, //顏色x軸半徑 20 //顏色y軸半徑 ), g_pGsCollection, &g_pRgBrush );
位圖刷——ID2D1BitmapBrush
//使用WIC從檔案中加載資源后 pRenderTarget->CreateBitmapBrush(pBitmap, &BitmapBrush);
4.畫刷使用
pRenderTarget->BeginDraw(); pRenderTarget->FillRectangle(&rect, pxxxBrush); pRenderTarget->DrawRectangle(&rect, pxxxBrush); pRenderTarget->EndDraw();
下一期將學習位圖刷和位圖的更多用法,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/17925.html
標籤:其他
上一篇:單相機做分屏混合
