# Use virtual backgrounds

<!-- WARNING: THIS FILE WAS AUTOGENERATED! DO NOT EDIT! -->

> The code on this page only works with the **custom UI**.

Use `IsSupportVirtualBG` in `IVirtualBGSettingContext` to determine whether the device supports virtual backgrounds, then use `ISettingService` to enable them. You can also check to see if the smart virtual background - virtual backgrounds with green screens - are supported.

```cpp
// Create ISettingService object to perform Settings actions
    ZOOM_SDK_NAMESPACE::ISettingService* settingService;
    ZOOM_SDK_NAMESPACE::SDKError settingServiceInitReturnVal = ZOOM_SDK_NAMESPACE::CreateSettingService(&settingService);
if (settingServiceInitReturnVal == ZOOM_SDK_NAMESPACE::SDKERR_SUCCESS) {

    ZOOM_SDK_NAMESPACE::IVirtualBGSettingContext* virtualBGSettings;
    virtualBGSettings = settingService->GetVirtualBGSettings();

    if (virtualBGSettings->IsSupportVirtualBG()){
       // Virtual background is supported
       // Check if smart virtual background is supported
       if (virtualBGSettings->IsDeviceSupportSmartVirtualBG()){

       }
    }
}
```

If the device supports virtual backgrounds, use `IVirtualBGSettingContext*` to list, add, remove, and set virtual backgrounds.

```cpp
// To list available virtual backgrounds
virtualBGSettings->GetBGImageList();

// The list will contain a NONE, BLUR and any added items
        // The IVirtualBGImageInfo has isSelected() method to check if the item is currently selected

// To add virtual background to list, first check if have permission to add
if (virtualBGSettings->IsAllowToAddNewVBItem()) {
    virtualBGSettings->AddBGImage(imagePath)
    ;
}

/*
 To remove a specific virtual background from the list.
 Note: You cannot remove NONE and BLUR type.
 */
if (virtualBGSettings->isAllowDelete()) {
  virtualBGSettings->RemoveBGImage(IVirtualBGImageInfo);
}

// To set a specific virtual background
virtualBGSettings->UseBGImage(IVirtualBGImageInfo);
```

Users can preview the virtual background.

```cpp
ITestVideoDeviceHelper* testVideoDeviceHelper = virtualBGSettings->GetTestVideoDeviceHelper();

//preview requires even and window handle, otherwise it might fail to start and stop
testVideoDeviceHelper->SetEvent(eventHandler);
testVideoDeviceHelper->SetVideoPreviewParentWnd(hParentWnd, rc);

// Start preview
testVideoDeviceHelper->TestVideoStartPreview(deviceID);

// Stop preview
testVideoDeviceHelper->TestVideoStopPreview();
```

Users can also have green screen support for virtual backgrounds.

```cpp
/*
 For green background, there are these 3 methods available

 */
virtualBGSettings->IsUsingGreenScreenOn();
virtualBGSettings->SetUsingGreenScreen(true);
virtualBGSettings->IsDeviceSupportGreenVirtualBackgroundVideo();
```

---
