Skip to content

PremultiplyAlpha

Chuck Walbourn edited this page Sep 14, 2016 · 16 revisions

This converts an image assuming the original is not using premultiplied alpha into a premultiplied alpha version of the same image. The format and size are not changed.

Breaking Change notice: The 'flags' parameter was not present in the August 2013 and previous versions of DirectXTex.

HRESULT PremultiplyAlpha( const Image& srcImage, DWORD flags,
    ScratchImage& image, bool reverse = false );

HRESULT PremultiplyAlpha( const Image* srcImages, size_t nimages,
    const TexMetadata& metadata, DWORD flags,
    ScratchImage& result, bool reverse = false );

Parameters

flags: Combination of options to apply

  • PMALPHA_IGNORE_SRGB Ignore any sRGB colorspace conversions

This controls color space transformation for conversions.

  • TEX_PMALPHA_SRGB_IN Indicates the input format is the sRGB format. This is implied if using a DXGI_FORMAT_*_SRGB format
  • TEX_PMALPHA_SRGB_OUT Indicates the output format is the sRGB format. This is implied if using a DXGI_FORMAT_*_SRGB format
  • TEX_PMALPHA_SRGB This is the same as setting both TEX_PMALPHA_SRGB_IN and TEX_PMALPHA_SRGB_OUT

reverse: If set to true, then the conversion goes from premultipled alpha to nonpremultipled alpha (a.k.a. straight alpha).

Note that the conversion to premultipled alpha is not fully reversible. For example if alpha is 0, then all the color information becomes 0.

Example

ScratchImage srcImage;

...

ScratchImage destImage;
hr = PremultiplyAlpha( srcImage.GetImages(), srcImage.GetImageCount(),
    srcImage.GetMetadata(), TEX_PMALPHA_DEFAULT, destImage );
if ( FAILED(hr) )
    ...

Remarks

This function does not operate directly on block compressed images. See Decompress and Compress.

This function cannot operate directly on a planar format image. See ConvertToSinglePlane for a method for converting planar data to a format that is supported by this routine.

This is most useful for working with rendering that relies on premultiplied alpha blending (see DirectXTK).

Related Links

Premultiplied Alpha (ShawnHar)
Premultiplied alpha (Tom Forsyth)
Gamma Correction vs. Premultiplied Pixels

For Use

  • Universal Windows Platform apps
  • Windows desktop apps
  • Windows 11
  • Windows 10
  • Windows 8.1
  • Xbox One
  • Xbox Series X|S
  • Windows Subsystem for Linux

Architecture

  • x86
  • x64
  • ARM64

For Development

  • Visual Studio 2022
  • Visual Studio 2019 (16.11)
  • clang/LLVM v12 - v18
  • GCC 10.5, 11.4, 12.3
  • MinGW 12.2, 13.2
  • CMake 3.20

Related Projects

DirectXTex Rust bindings

DirectX Tool Kit for DirectX 11

DirectX Tool Kit for DirectX 12

DirectXMesh

DirectXMath

Tools

Test Suite

Content Exporter

DxCapsViewer

See also

DirectX Landing Page

Clone this wiki locally