mirror of https://github.com/SixLabors/ImageSharp
13 changed files with 510 additions and 307 deletions
@ -0,0 +1,297 @@ |
|||
// <auto-generated />
|
|||
|
|||
namespace ImageSharp.PixelFormats |
|||
{ |
|||
using System; |
|||
using System.Numerics; |
|||
using System.Runtime.CompilerServices; |
|||
|
|||
public partial class PixelOperations<TPixel> |
|||
{ |
|||
|
|||
/// <summary>
|
|||
/// Converts 'count' elements in 'source` span of <see cref="Rgba32"/> data to a span of <typeparamref name="TPixel"/>-s.
|
|||
/// </summary>
|
|||
/// <param name="source">The source <see cref="Span{T}"/> of <see cref="Rgba32"/> data.</param>
|
|||
/// <param name="destPixels">The <see cref="Span{T}"/> to the destination pixels.</param>
|
|||
/// <param name="count">The number of pixels to convert.</param>
|
|||
internal virtual void PackFromRgba32(Span<Rgba32> source, Span<TPixel> destPixels, int count) |
|||
{ |
|||
GuardSpans(source, nameof(source), destPixels, nameof(destPixels), count); |
|||
|
|||
ref Rgba32 sourceRef = ref source.DangerousGetPinnableReference(); |
|||
ref TPixel destRef = ref destPixels.DangerousGetPinnableReference(); |
|||
|
|||
Rgba32 rgba = new Rgba32(0, 0, 0, 255); |
|||
|
|||
for (int i = 0; i < count; i++) |
|||
{ |
|||
ref TPixel dp = ref Unsafe.Add(ref destRef, i); |
|||
rgba = Unsafe.Add(ref sourceRef, i); |
|||
dp.PackFromRgba32(rgba); |
|||
} |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// A helper for <see cref="PackFromRgba32(Span{Rgba32}, Span{TPixel}, int)"/> that expects a byte span.
|
|||
/// The layout of the data in 'sourceBytes' must be compatible with <see cref="Rgba32"/> layout.
|
|||
/// </summary>
|
|||
/// <param name="sourceBytes">The <see cref="Span{T}"/> to the source bytes.</param>
|
|||
/// <param name="destPixels">The <see cref="Span{T}"/> to the destination pixels.</param>
|
|||
/// <param name="count">The number of pixels to convert.</param>
|
|||
[MethodImpl(MethodImplOptions.AggressiveInlining)] |
|||
internal void PackFromRgba32Bytes(Span<byte> sourceBytes, Span<TPixel> destPixels, int count) |
|||
{ |
|||
this.PackFromRgba32(sourceBytes.NonPortableCast<byte, Rgba32>(), destPixels, count); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// Converts 'count' pixels in 'sourcePixels` span to a span of <see cref="Rgba32"/>-s.
|
|||
/// Bulk version of <see cref="IPixel.ToRgba32(ref Rgba32)"/>.
|
|||
/// </summary>
|
|||
/// <param name="sourcePixels">The span of source pixels</param>
|
|||
/// <param name="dest">The destination span of <see cref="Rgba32"/> data.</param>
|
|||
/// <param name="count">The number of pixels to convert.</param>
|
|||
internal virtual void ToRgba32(Span<TPixel> sourcePixels, Span<Rgba32> dest, int count) |
|||
{ |
|||
GuardSpans(sourcePixels, nameof(sourcePixels), dest, nameof(dest), count); |
|||
|
|||
ref TPixel sourceBaseRef = ref sourcePixels.DangerousGetPinnableReference(); |
|||
ref Rgba32 destBaseRef = ref dest.DangerousGetPinnableReference(); |
|||
|
|||
for (int i = 0; i < count; i++) |
|||
{ |
|||
ref TPixel sp = ref Unsafe.Add(ref sourceBaseRef, i); |
|||
ref Rgba32 dp = ref Unsafe.Add(ref destBaseRef, i); |
|||
sp.ToRgba32(ref dp); |
|||
} |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// A helper for <see cref="ToRgba32(Span{TPixel}, Span{Rgba32}, int)"/> that expects a byte span as destination.
|
|||
/// The layout of the data in 'destBytes' must be compatible with <see cref="Rgba32"/> layout.
|
|||
/// </summary>
|
|||
/// <param name="sourceColors">The <see cref="Span{T}"/> to the source colors.</param>
|
|||
/// <param name="destBytes">The <see cref="Span{T}"/> to the destination bytes.</param>
|
|||
/// <param name="count">The number of pixels to convert.</param>
|
|||
[MethodImpl(MethodImplOptions.AggressiveInlining)] |
|||
internal void ToRgba32Bytes(Span<TPixel> sourceColors, Span<byte> destBytes, int count) |
|||
{ |
|||
this.ToRgba32(sourceColors, destBytes.NonPortableCast<byte, Rgba32>(), count); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// Converts 'count' elements in 'source` span of <see cref="Bgra32"/> data to a span of <typeparamref name="TPixel"/>-s.
|
|||
/// </summary>
|
|||
/// <param name="source">The source <see cref="Span{T}"/> of <see cref="Bgra32"/> data.</param>
|
|||
/// <param name="destPixels">The <see cref="Span{T}"/> to the destination pixels.</param>
|
|||
/// <param name="count">The number of pixels to convert.</param>
|
|||
internal virtual void PackFromBgra32(Span<Bgra32> source, Span<TPixel> destPixels, int count) |
|||
{ |
|||
GuardSpans(source, nameof(source), destPixels, nameof(destPixels), count); |
|||
|
|||
ref Bgra32 sourceRef = ref source.DangerousGetPinnableReference(); |
|||
ref TPixel destRef = ref destPixels.DangerousGetPinnableReference(); |
|||
|
|||
Rgba32 rgba = new Rgba32(0, 0, 0, 255); |
|||
|
|||
for (int i = 0; i < count; i++) |
|||
{ |
|||
ref TPixel dp = ref Unsafe.Add(ref destRef, i); |
|||
rgba = Unsafe.Add(ref sourceRef, i).ToRgba32(); |
|||
dp.PackFromRgba32(rgba); |
|||
} |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// A helper for <see cref="PackFromBgra32(Span{Bgra32}, Span{TPixel}, int)"/> that expects a byte span.
|
|||
/// The layout of the data in 'sourceBytes' must be compatible with <see cref="Bgra32"/> layout.
|
|||
/// </summary>
|
|||
/// <param name="sourceBytes">The <see cref="Span{T}"/> to the source bytes.</param>
|
|||
/// <param name="destPixels">The <see cref="Span{T}"/> to the destination pixels.</param>
|
|||
/// <param name="count">The number of pixels to convert.</param>
|
|||
[MethodImpl(MethodImplOptions.AggressiveInlining)] |
|||
internal void PackFromBgra32Bytes(Span<byte> sourceBytes, Span<TPixel> destPixels, int count) |
|||
{ |
|||
this.PackFromBgra32(sourceBytes.NonPortableCast<byte, Bgra32>(), destPixels, count); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// Converts 'count' pixels in 'sourcePixels` span to a span of <see cref="Bgra32"/>-s.
|
|||
/// Bulk version of <see cref="IPixel.ToBgra32(ref Bgra32)"/>.
|
|||
/// </summary>
|
|||
/// <param name="sourcePixels">The span of source pixels</param>
|
|||
/// <param name="dest">The destination span of <see cref="Bgra32"/> data.</param>
|
|||
/// <param name="count">The number of pixels to convert.</param>
|
|||
internal virtual void ToBgra32(Span<TPixel> sourcePixels, Span<Bgra32> dest, int count) |
|||
{ |
|||
GuardSpans(sourcePixels, nameof(sourcePixels), dest, nameof(dest), count); |
|||
|
|||
ref TPixel sourceBaseRef = ref sourcePixels.DangerousGetPinnableReference(); |
|||
ref Bgra32 destBaseRef = ref dest.DangerousGetPinnableReference(); |
|||
|
|||
for (int i = 0; i < count; i++) |
|||
{ |
|||
ref TPixel sp = ref Unsafe.Add(ref sourceBaseRef, i); |
|||
ref Bgra32 dp = ref Unsafe.Add(ref destBaseRef, i); |
|||
sp.ToBgra32(ref dp); |
|||
} |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// A helper for <see cref="ToBgra32(Span{TPixel}, Span{Bgra32}, int)"/> that expects a byte span as destination.
|
|||
/// The layout of the data in 'destBytes' must be compatible with <see cref="Bgra32"/> layout.
|
|||
/// </summary>
|
|||
/// <param name="sourceColors">The <see cref="Span{T}"/> to the source colors.</param>
|
|||
/// <param name="destBytes">The <see cref="Span{T}"/> to the destination bytes.</param>
|
|||
/// <param name="count">The number of pixels to convert.</param>
|
|||
[MethodImpl(MethodImplOptions.AggressiveInlining)] |
|||
internal void ToBgra32Bytes(Span<TPixel> sourceColors, Span<byte> destBytes, int count) |
|||
{ |
|||
this.ToBgra32(sourceColors, destBytes.NonPortableCast<byte, Bgra32>(), count); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// Converts 'count' elements in 'source` span of <see cref="Rgb24"/> data to a span of <typeparamref name="TPixel"/>-s.
|
|||
/// </summary>
|
|||
/// <param name="source">The source <see cref="Span{T}"/> of <see cref="Rgb24"/> data.</param>
|
|||
/// <param name="destPixels">The <see cref="Span{T}"/> to the destination pixels.</param>
|
|||
/// <param name="count">The number of pixels to convert.</param>
|
|||
internal virtual void PackFromRgb24(Span<Rgb24> source, Span<TPixel> destPixels, int count) |
|||
{ |
|||
GuardSpans(source, nameof(source), destPixels, nameof(destPixels), count); |
|||
|
|||
ref Rgb24 sourceRef = ref source.DangerousGetPinnableReference(); |
|||
ref TPixel destRef = ref destPixels.DangerousGetPinnableReference(); |
|||
|
|||
Rgba32 rgba = new Rgba32(0, 0, 0, 255); |
|||
|
|||
for (int i = 0; i < count; i++) |
|||
{ |
|||
ref TPixel dp = ref Unsafe.Add(ref destRef, i); |
|||
rgba.Rgb = Unsafe.Add(ref sourceRef, i); |
|||
dp.PackFromRgba32(rgba); |
|||
} |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// A helper for <see cref="PackFromRgb24(Span{Rgb24}, Span{TPixel}, int)"/> that expects a byte span.
|
|||
/// The layout of the data in 'sourceBytes' must be compatible with <see cref="Rgb24"/> layout.
|
|||
/// </summary>
|
|||
/// <param name="sourceBytes">The <see cref="Span{T}"/> to the source bytes.</param>
|
|||
/// <param name="destPixels">The <see cref="Span{T}"/> to the destination pixels.</param>
|
|||
/// <param name="count">The number of pixels to convert.</param>
|
|||
[MethodImpl(MethodImplOptions.AggressiveInlining)] |
|||
internal void PackFromRgb24Bytes(Span<byte> sourceBytes, Span<TPixel> destPixels, int count) |
|||
{ |
|||
this.PackFromRgb24(sourceBytes.NonPortableCast<byte, Rgb24>(), destPixels, count); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// Converts 'count' pixels in 'sourcePixels` span to a span of <see cref="Rgb24"/>-s.
|
|||
/// Bulk version of <see cref="IPixel.ToRgb24(ref Rgb24)"/>.
|
|||
/// </summary>
|
|||
/// <param name="sourcePixels">The span of source pixels</param>
|
|||
/// <param name="dest">The destination span of <see cref="Rgb24"/> data.</param>
|
|||
/// <param name="count">The number of pixels to convert.</param>
|
|||
internal virtual void ToRgb24(Span<TPixel> sourcePixels, Span<Rgb24> dest, int count) |
|||
{ |
|||
GuardSpans(sourcePixels, nameof(sourcePixels), dest, nameof(dest), count); |
|||
|
|||
ref TPixel sourceBaseRef = ref sourcePixels.DangerousGetPinnableReference(); |
|||
ref Rgb24 destBaseRef = ref dest.DangerousGetPinnableReference(); |
|||
|
|||
for (int i = 0; i < count; i++) |
|||
{ |
|||
ref TPixel sp = ref Unsafe.Add(ref sourceBaseRef, i); |
|||
ref Rgb24 dp = ref Unsafe.Add(ref destBaseRef, i); |
|||
sp.ToRgb24(ref dp); |
|||
} |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// A helper for <see cref="ToRgb24(Span{TPixel}, Span{Rgb24}, int)"/> that expects a byte span as destination.
|
|||
/// The layout of the data in 'destBytes' must be compatible with <see cref="Rgb24"/> layout.
|
|||
/// </summary>
|
|||
/// <param name="sourceColors">The <see cref="Span{T}"/> to the source colors.</param>
|
|||
/// <param name="destBytes">The <see cref="Span{T}"/> to the destination bytes.</param>
|
|||
/// <param name="count">The number of pixels to convert.</param>
|
|||
[MethodImpl(MethodImplOptions.AggressiveInlining)] |
|||
internal void ToRgb24Bytes(Span<TPixel> sourceColors, Span<byte> destBytes, int count) |
|||
{ |
|||
this.ToRgb24(sourceColors, destBytes.NonPortableCast<byte, Rgb24>(), count); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// Converts 'count' elements in 'source` span of <see cref="Bgr24"/> data to a span of <typeparamref name="TPixel"/>-s.
|
|||
/// </summary>
|
|||
/// <param name="source">The source <see cref="Span{T}"/> of <see cref="Bgr24"/> data.</param>
|
|||
/// <param name="destPixels">The <see cref="Span{T}"/> to the destination pixels.</param>
|
|||
/// <param name="count">The number of pixels to convert.</param>
|
|||
internal virtual void PackFromBgr24(Span<Bgr24> source, Span<TPixel> destPixels, int count) |
|||
{ |
|||
GuardSpans(source, nameof(source), destPixels, nameof(destPixels), count); |
|||
|
|||
ref Bgr24 sourceRef = ref source.DangerousGetPinnableReference(); |
|||
ref TPixel destRef = ref destPixels.DangerousGetPinnableReference(); |
|||
|
|||
Rgba32 rgba = new Rgba32(0, 0, 0, 255); |
|||
|
|||
for (int i = 0; i < count; i++) |
|||
{ |
|||
ref TPixel dp = ref Unsafe.Add(ref destRef, i); |
|||
rgba.Bgr = Unsafe.Add(ref sourceRef, i); |
|||
dp.PackFromRgba32(rgba); |
|||
} |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// A helper for <see cref="PackFromBgr24(Span{Bgr24}, Span{TPixel}, int)"/> that expects a byte span.
|
|||
/// The layout of the data in 'sourceBytes' must be compatible with <see cref="Bgr24"/> layout.
|
|||
/// </summary>
|
|||
/// <param name="sourceBytes">The <see cref="Span{T}"/> to the source bytes.</param>
|
|||
/// <param name="destPixels">The <see cref="Span{T}"/> to the destination pixels.</param>
|
|||
/// <param name="count">The number of pixels to convert.</param>
|
|||
[MethodImpl(MethodImplOptions.AggressiveInlining)] |
|||
internal void PackFromBgr24Bytes(Span<byte> sourceBytes, Span<TPixel> destPixels, int count) |
|||
{ |
|||
this.PackFromBgr24(sourceBytes.NonPortableCast<byte, Bgr24>(), destPixels, count); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// Converts 'count' pixels in 'sourcePixels` span to a span of <see cref="Bgr24"/>-s.
|
|||
/// Bulk version of <see cref="IPixel.ToBgr24(ref Bgr24)"/>.
|
|||
/// </summary>
|
|||
/// <param name="sourcePixels">The span of source pixels</param>
|
|||
/// <param name="dest">The destination span of <see cref="Bgr24"/> data.</param>
|
|||
/// <param name="count">The number of pixels to convert.</param>
|
|||
internal virtual void ToBgr24(Span<TPixel> sourcePixels, Span<Bgr24> dest, int count) |
|||
{ |
|||
GuardSpans(sourcePixels, nameof(sourcePixels), dest, nameof(dest), count); |
|||
|
|||
ref TPixel sourceBaseRef = ref sourcePixels.DangerousGetPinnableReference(); |
|||
ref Bgr24 destBaseRef = ref dest.DangerousGetPinnableReference(); |
|||
|
|||
for (int i = 0; i < count; i++) |
|||
{ |
|||
ref TPixel sp = ref Unsafe.Add(ref sourceBaseRef, i); |
|||
ref Bgr24 dp = ref Unsafe.Add(ref destBaseRef, i); |
|||
sp.ToBgr24(ref dp); |
|||
} |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// A helper for <see cref="ToBgr24(Span{TPixel}, Span{Bgr24}, int)"/> that expects a byte span as destination.
|
|||
/// The layout of the data in 'destBytes' must be compatible with <see cref="Bgr24"/> layout.
|
|||
/// </summary>
|
|||
/// <param name="sourceColors">The <see cref="Span{T}"/> to the source colors.</param>
|
|||
/// <param name="destBytes">The <see cref="Span{T}"/> to the destination bytes.</param>
|
|||
/// <param name="count">The number of pixels to convert.</param>
|
|||
[MethodImpl(MethodImplOptions.AggressiveInlining)] |
|||
internal void ToBgr24Bytes(Span<TPixel> sourceColors, Span<byte> destBytes, int count) |
|||
{ |
|||
this.ToBgr24(sourceColors, destBytes.NonPortableCast<byte, Bgr24>(), count); |
|||
} |
|||
|
|||
} |
|||
} |
|||
@ -0,0 +1,120 @@ |
|||
<#@ template debug="false" hostspecific="false" language="C#" #> |
|||
<#@ assembly name="System.Core" #> |
|||
<#@ import namespace="System.Linq" #> |
|||
<#@ import namespace="System.Text" #> |
|||
<#@ import namespace="System.Collections.Generic" #> |
|||
<#@ output extension=".cs" #> |
|||
<# |
|||
|
|||
void GenerateToDestFormatMethods(string pixelType) |
|||
{ |
|||
#> |
|||
|
|||
/// <summary> |
|||
/// Converts 'count' pixels in 'sourcePixels` span to a span of <see cref="<#=pixelType#>"/>-s. |
|||
/// Bulk version of <see cref="IPixel.To<#=pixelType#>(ref <#=pixelType#>)"/>. |
|||
/// </summary> |
|||
/// <param name="sourcePixels">The span of source pixels</param> |
|||
/// <param name="dest">The destination span of <see cref="<#=pixelType#>"/> data.</param> |
|||
/// <param name="count">The number of pixels to convert.</param> |
|||
internal virtual void To<#=pixelType#>(Span<TPixel> sourcePixels, Span<<#=pixelType#>> dest, int count) |
|||
{ |
|||
GuardSpans(sourcePixels, nameof(sourcePixels), dest, nameof(dest), count); |
|||
|
|||
ref TPixel sourceBaseRef = ref sourcePixels.DangerousGetPinnableReference(); |
|||
ref <#=pixelType#> destBaseRef = ref dest.DangerousGetPinnableReference(); |
|||
|
|||
for (int i = 0; i < count; i++) |
|||
{ |
|||
ref TPixel sp = ref Unsafe.Add(ref sourceBaseRef, i); |
|||
ref <#=pixelType#> dp = ref Unsafe.Add(ref destBaseRef, i); |
|||
sp.To<#=pixelType#>(ref dp); |
|||
} |
|||
} |
|||
|
|||
/// <summary> |
|||
/// A helper for <see cref="To<#=pixelType#>(Span{TPixel}, Span{<#=pixelType#>}, int)"/> that expects a byte span as destination. |
|||
/// The layout of the data in 'destBytes' must be compatible with <see cref="<#=pixelType#>"/> layout. |
|||
/// </summary> |
|||
/// <param name="sourceColors">The <see cref="Span{T}"/> to the source colors.</param> |
|||
/// <param name="destBytes">The <see cref="Span{T}"/> to the destination bytes.</param> |
|||
/// <param name="count">The number of pixels to convert.</param> |
|||
[MethodImpl(MethodImplOptions.AggressiveInlining)] |
|||
internal void To<#=pixelType#>Bytes(Span<TPixel> sourceColors, Span<byte> destBytes, int count) |
|||
{ |
|||
this.To<#=pixelType#>(sourceColors, destBytes.NonPortableCast<byte, <#=pixelType#>>(), count); |
|||
} |
|||
<# |
|||
} |
|||
|
|||
void GeneratePackFromMethodUsingPackFromRgba32(string pixelType, string rgbaOperationCode) |
|||
{ |
|||
#> |
|||
|
|||
/// <summary> |
|||
/// Converts 'count' elements in 'source` span of <see cref="<#=pixelType#>"/> data to a span of <typeparamref name="TPixel"/>-s. |
|||
/// </summary> |
|||
/// <param name="source">The source <see cref="Span{T}"/> of <see cref="<#=pixelType#>"/> data.</param> |
|||
/// <param name="destPixels">The <see cref="Span{T}"/> to the destination pixels.</param> |
|||
/// <param name="count">The number of pixels to convert.</param> |
|||
internal virtual void PackFrom<#=pixelType#>(Span<<#=pixelType#>> source, Span<TPixel> destPixels, int count) |
|||
{ |
|||
GuardSpans(source, nameof(source), destPixels, nameof(destPixels), count); |
|||
|
|||
ref <#=pixelType#> sourceRef = ref source.DangerousGetPinnableReference(); |
|||
ref TPixel destRef = ref destPixels.DangerousGetPinnableReference(); |
|||
|
|||
Rgba32 rgba = new Rgba32(0, 0, 0, 255); |
|||
|
|||
for (int i = 0; i < count; i++) |
|||
{ |
|||
ref TPixel dp = ref Unsafe.Add(ref destRef, i); |
|||
<#=rgbaOperationCode#> |
|||
dp.PackFromRgba32(rgba); |
|||
} |
|||
} |
|||
|
|||
/// <summary> |
|||
/// A helper for <see cref="PackFrom<#=pixelType#>(Span{<#=pixelType#>}, Span{TPixel}, int)"/> that expects a byte span. |
|||
/// The layout of the data in 'sourceBytes' must be compatible with <see cref="<#=pixelType#>"/> layout. |
|||
/// </summary> |
|||
/// <param name="sourceBytes">The <see cref="Span{T}"/> to the source bytes.</param> |
|||
/// <param name="destPixels">The <see cref="Span{T}"/> to the destination pixels.</param> |
|||
/// <param name="count">The number of pixels to convert.</param> |
|||
[MethodImpl(MethodImplOptions.AggressiveInlining)] |
|||
internal void PackFrom<#=pixelType#>Bytes(Span<byte> sourceBytes, Span<TPixel> destPixels, int count) |
|||
{ |
|||
this.PackFrom<#=pixelType#>(sourceBytes.NonPortableCast<byte, <#=pixelType#>>(), destPixels, count); |
|||
} |
|||
<# |
|||
} |
|||
|
|||
#> |
|||
// <auto-generated /> |
|||
|
|||
namespace ImageSharp.PixelFormats |
|||
{ |
|||
using System; |
|||
using System.Numerics; |
|||
using System.Runtime.CompilerServices; |
|||
|
|||
public partial class PixelOperations<TPixel> |
|||
{ |
|||
<# |
|||
|
|||
GeneratePackFromMethodUsingPackFromRgba32("Rgba32", "rgba = Unsafe.Add(ref sourceRef, i);"); |
|||
GenerateToDestFormatMethods("Rgba32"); |
|||
|
|||
GeneratePackFromMethodUsingPackFromRgba32("Bgra32", "rgba = Unsafe.Add(ref sourceRef, i).ToRgba32();"); |
|||
GenerateToDestFormatMethods("Bgra32"); |
|||
|
|||
GeneratePackFromMethodUsingPackFromRgba32("Rgb24", "rgba.Rgb = Unsafe.Add(ref sourceRef, i);"); |
|||
GenerateToDestFormatMethods("Rgb24"); |
|||
|
|||
GeneratePackFromMethodUsingPackFromRgba32("Bgr24", "rgba.Bgr = Unsafe.Add(ref sourceRef, i);"); |
|||
GenerateToDestFormatMethods("Bgr24"); |
|||
|
|||
#> |
|||
|
|||
} |
|||
} |
|||
Loading…
Reference in new issue