Как создать 32-битный красный байт текстуры - PullRequest
0 голосов
/ 23 декабря 2018

Я хочу сделать красный буфер изображения текстуры.Кто-нибудь поможет мне сделать это правильно.Я попытался следующий, но не смог скопировать буфер в ID3D11Texture2D.Мне нужна помощь:

std::vector<BYTE> redTexture(w*h*4);
const auto stride = w * 4;
BYTE* buf = redTexture.data();

for (int i = 0; i < h; ++i)
{
    const auto redValue = Gdiplus::Color::Red;
    memcpy(buf, &redValue, stride);
    buf += stride;
}

Ответы [ 2 ]

0 голосов
/ 24 декабря 2018

Спасибо @HMD.Я решил проблему, выполнив следующие действия:

    CImage m_cImage;
    // create a test image
    m_cImage.Create(w, -h, 8 * 4); // 8 bpp * 4 channel
    auto hdc = m_cImage.GetDC();
    Gdiplus::Graphics graphics(hdc);

    // Create a SolidBrush object.
    Gdiplus::SolidBrush redBrush(Gdiplus::Color::Red);

    // Fill the rectangle.
    Gdiplus::Status status = graphics.FillRectangle(&redBrush, 0, 0, w, h);
    TRY_CONDITION(status == Gdiplus::Status::Ok);
    ....
    // Then saved the m_cImage.GetBits() to bmp file using Gdiplus::Bitmap
    // and my expected texture is found
0 голосов
/ 23 декабря 2018

Если DXGI_FORMAT вашей текстуры - R8G8B8A8_UNORM, вы можете сделать это следующим образом:

std::vector<BYTE> redTexture(w*h*4);

for(int i=0; i<redTexture.size(); i++)
{
    if(i%4==0)
    {
        redTexture[i]=255;
    }
    else if(i%4==3)
    {
        redTexture[i]=255;
    }
    else
    {
        redTexture[i]=0;
    }
}

Поскольку каждый пиксель состоит из 4-байтового значения RGBA, вы должны назначить первый и последний байты 255, остальные байтыдо 0, чтобы получить красный цвет.

...