Write Extra Channel With Name

TIFF Extra Channels Adobe Resources Write Pipeline

Save the name of an extra channel to Adobe Resources.

Сode Snippet

public static void Run()
{
    string channelName = "MyChannelName";

    using (var reader = new TiffReader("Copenhagen_Resized.tif"))
    using (var writer = new TiffWriter("BusinessCardExtraChannelWithName.tif"))
    using (var extraChannel = new Bitmap(reader.Width, reader.Height, PixelFormat.Format8bppGrayscale))
    {
        writer.ExtraChannels.Add(new TiffExtraChannelEntry(extraChannel, TiffChannelType.Color));

        var ar = new AdobeResourceDictionary();

        // https://www.adobe.com/devnet-apps/photoshop/fileformatashtml/
        const int unicodeAlphaNames = 0x0415;

        ar[unicodeAlphaNames] = ChannelNameToResource(channelName);
        writer.AdobeResources = ar;
        Pipeline.Run(reader + writer);
    }
}

private static AdobeResourceBlock ChannelNameToResource(string name)
{
    var arr = new List<byte>();

    arr.AddRange(new byte[] { 0, 0 });
    arr.AddRange(new byte[] { 0, (byte)(name.Length + 1) });

    foreach (var ch in name)
    {
        arr.AddRange(new byte[] { 0, (byte)ch });
    }

    arr.AddRange(new byte[] { 0, 0 });

    return new AdobeResourceBlock(string.Empty, arr.ToArray());
}

Input

Copenhagen_Resized.tif

Download

Output

BusinessCardExtraChannelWithName.tif

Download

For AI-assisted development: Download Graphics Mill Code Samples XML Catalog