Пример #1
0
void				ESSUB_LoadPNG			(const std::string& aPath, Texture** aTexture)
{
	assert(aTexture);

	wchar_t buffer[1024];
	MultiByteToWideChar(CP_UTF8, 0, aPath.c_str(), -1, buffer, 512);

	Texture* output = 0;

	Bitmap img(buffer, false);
	if(img.GetWidth())
	{
		output = ESVideo::CreateTexture(img.GetWidth(), img.GetHeight(), true);
		output->Clear(0);

		BitmapData BMData;
		BMData.Width = std::min(output->GetWidth(), img.GetWidth());
		BMData.Height = std::min(output->GetHeight(), img.GetHeight());
		BMData.Stride = output->GetWidth() * 4;
		BMData.PixelFormat = PixelFormat32bppARGB;
		BMData.Scan0 = output->Map();
		BMData.Reserved = 0;

		Rect area(0, 0, img.GetWidth(), img.GetHeight());
		img.LockBits(&area, ImageLockModeRead | ImageLockModeUserInputBuf, PixelFormat32bppARGB, &BMData);
		img.UnlockBits(&BMData);

		output->Unmap();
	}

	*aTexture = output;
}
Пример #2
0
    Texture*							GetTexture											()
    {
        Texture* output = 0;
        if(Valid)
        {
            output = ESVideo::CreateTexture(Width, Height, true);
            output->Clear(0);

            uint32_t copyWidth = std::min(Width, output->GetWidth());
            uint32_t copyHeight = std::min(Height, output->GetHeight());
            uint32_t* texPixels = output->Map();

            for(int i = 0; i != copyHeight; i ++)
            {
                uint32_t* dest = texPixels + (output->GetPitch() * i);
                uint8_t* source = RowPointers[i];

                for(int j = 0; j != copyWidth; j ++)
                {
                    uint32_t a = (InfoPtr->color_type == PNG_COLOR_TYPE_RGB_ALPHA) ? *source++ : 0xFF;
                    uint32_t r = *source ++;
                    uint32_t g = *source ++;
                    uint32_t b = *source ++;
                    *dest++ = output->ConvertPixel(r, g, b, a);
                }
            }

            output->Unmap();
        }

        return output;
    }