Direct 2D #9 О текстурах
Johnny_Depp 16 минут назад Direct 2D #9 О текстурах Уровень сложности Простой Время на прочтение 8 мин Охват и читатели 337 C++ * Windows * Туториал Здравствуйте! После разбора WIC начинается работа с данными, для...
Anthropic — What company has the best second artificial intelligence model at the end of June?
В сфере искусственного интеллекта произошло заметное событие. Johnny_Depp 16 минут назад Direct 2D #9 О текстурах Уровень сложности Простой Время на прочтение 8 мин Охват и читатели 337 C++ * Windows * Туториал Здравствуйте! После разбора WIC начинается работа с данными, для которой он как раз и пригодится. Сразу скажу, что спрайты будут в следующей статье, так как понадобится немного залезть в Direct3D, рассказать про DXGI-цепочки и всё что будет важным для понимания этих вещей.
Поэтому эта статья не очень длинная, но касается текстур - а текстуры, к слову, будут использоваться спрайтами. Кстати, о разнице между спрайтами и текстурой: Текстура - после того как вы декодировали файл с изображением и конвертировали его в нужный пиксельный формат, вы можете передать данные в видеопамять (такие данные в видеопамяти - это текстура). Спрайт - ссылается на текстуру и содержит описание того, как её отрисовать, и т.
Технические детали
То есть если нужно отрисовать текстуру по-разному, вы прибегаете к спрайтам. Просто напоминаю, что пиксельные форматы описывают хранение одного пикселя. Вот весь их список в Direct2D.
Ну а теперь - процесс получения текстуры. Как я говорил ранее, необходимо декодировать файл с изображением и конвертировать его в один из пиксельных форматов. Так как это было в статье #8, здесь будет не полный код: 1.
Получаем доступ к фабрике WIC IWICImagingFactory* pWicFactory; CoCreateInstance(CLSID_WICImagingFactory, ... Декодируем файл IWICBitmapDecoder* pDecoder; pWicFactory->CreateDecoderFromFilename(L"image. Извлекаем кадр IWICBitmapFrameDecode* pFrame; pDecoder->GetFrame(0, &pFrame); 4.
Отраслевые последствия
Конвертируем в понятный Direct2D формат IWICFormatConverter* pConverter; pWicFactory->CreateFormatConverter(&pConverter); pConverter->Initialize(pFrame, GUID_WICPixelFormat32bppPBGRA, ... ); Теперь создание текстуры: ID2D1Bitmap* pBitmap; pRenderTarget->CreateBitmapFromWicBitmap(pConverter, nullptr, &pBitmap); После этого текстура находится в видеопамяти. Теперь о том, что можно сделать с битмапом: D2D1_SIZE_F GetSize() - возвращает размеры битмапа с учётом DPI.
D2D1_SIZE_U GetPixelSize() - возвращает размеры без учёта DPI D2D1_PIXEL_FORMAT GetPixelFormat() - возвращает формат пикселей. void GetDpi(FLOAT* dpiX, FLOAT* dpiY) - возвращает значения DPI, с которыми был создан битмап. HRESULT CopyFromMemory(const D2D1_RECT_U* dstRect, const void* srcData, UINT32 pitch) - копирует пиксели из памяти в битмап.
dstRect - область в битмапе, куда копируем (если nullptr, то во весь битмап). srcData - указатель на данные в системной памяти, pitch - ширина строки данных в байтах. HRESULT CopyFromBitmap(const D2D1_POINT_2U* destPoint, ID2D1Bitmap* bitmap, const D2D1_RECT_U* srcRect) - копирует пиксели из другого битмапа в текущий.
Этот прогресс даёт важные сигналы о будущем отрасли, и технологический мир внимательно наблюдает.





