이미지 슈퍼 해상도 API를 사용하면 이미지 선명도 및 크기 조정이 가능합니다.
배율 인수가 높을수록 아티팩트가 도입되고 이미지 정확도가 손상될 수 있으므로 크기 조정은 최대 8배로 제한됩니다. 최종 너비 또는 높이가 원래 값의 8배보다 크면 예외가 발생합니다.
API 세부 정보는AI 이미징 기능에 대한 API 참조를 참조하세요.
콘텐츠 조정 세부 정보는생성 AI API를 사용한 콘텐츠 안전성을 참조하세요.
중요합니다
패키지 매니페스트 요구 사항: Windows AI 이미징 API를 사용하려면 앱이 선언된 systemAIModels기능을 사용하여 MSIX 패키지로 Package.appxmanifest 패키지되어야 합니다. 또한 매니페스트의 MaxVersionTested 특성이 Windows AI 기능을 제대로 지원하도록 최신 Windows 버전(예: 10.0.26226.0 이상)으로 설정되어 있는지 확인합니다. 이전 값을 사용하면 모델을 로드할 때 "앱에서 선언되지 않음" 오류가 발생할 수 있습니다.
<Dependencies>
<TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.17763.0" MaxVersionTested="10.0.26226.0" />
<TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.17763.0" MaxVersionTested="10.0.26226.0" />
</Dependencies>
이미지 슈퍼 해상도 예제
다음 예제에서는 기존 소프트웨어 비트맵 이미지targetWidth의 배율(targetHeight, softwareBitmap)을 변경하고 개체를 사용하여 ImageScaler 이미지 선명도를 개선하는 방법을 보여 줍니다(이미지 크기를 조정하지 않고 선명도를 개선하기 위해 기존 이미지 너비와 높이를 지정하기만 하면 됩니다).
GetReadyState 메서드를 호출한 다음 EnsureReadyAsync 메서드가 성공적으로 반환되도록 대기하여 이미지 슈퍼 해상도 모델을 사용할 수 있는지 확인합니다.
이미지 슈퍼 해상도 모델을 사용할 수 있게 되면 ImageScaler 개체를 만들어 참조합니다.
ScaleSoftwareBitmap 메서드를 사용하여 기존 이미지와 원하는 너비 및 높이를 모델에 전달하여 기존 이미지의 선명하고 크기가 조정된 버전을 가져옵니다.
using Microsoft.Graphics.Imaging;
using Microsoft.Windows.Management.Deployment;
using Microsoft.Windows.AI;
using Windows.Graphics.Imaging;
if (ImageScaler.GetReadyState() == AIFeatureReadyState.NotReady)
{
var result = await ImageScaler.EnsureReadyAsync();
if (result.Status != AIFeatureReadyResultState.Success)
{
throw result.ExtendedError;
}
}
ImageScaler imageScaler = await ImageScaler.CreateAsync();
SoftwareBitmap finalImage = imageScaler.ScaleSoftwareBitmap(softwareBitmap, targetWidth, targetHeight);
#include <winrt/Microsoft.Graphics.Imaging.h>
#include <winrt/Microsoft.Windows.AI.h>
#include <winrt/Windows.Foundation.h>
#include <winrt/Windows.Graphics.Imaging.h>
using namespace winrt::Microsoft::Graphics::Imaging;
using namespace winrt::Microsoft::Windows::AI;
using namespace winrt::Windows::Foundation;
using namespace winrt::Windows::Graphics::Imaging;
if (ImageScaler::GetReadyState() == AIFeatureReadyState::NotReady)
{
auto loadResult = ImageScaler::EnsureReadyAsync().get();
if (loadResult.Status() != AIFeatureReadyResultState::Success)
{
throw winrt::hresult_error(loadResult.ExtendedError());
}
}
int targetWidth = 100;
int targetHeight = 100;
ImageScaler imageScaler = ImageScaler::CreateAsync().get();
Windows::Graphics::Imaging::SoftwareBitmap finalImage =
imageScaler.ScaleSoftwareBitmap(softwareBitmap, targetWidth, targetHeight);