Click here to Skip to main content
15,884,388 members
Articles / Multimedia / GDI+

Matrix Transformation of Images using .NET GDI+

Rate me:
Please Sign up or sign in to vote.
4.86/5 (71 votes)
1 Jul 2016CPOL4 min read 390.3K   12.7K   187  
Use of GDI+ Matrix class to perform image transformation.
<?xml version="1.0" encoding="utf-8"?>
<root>
  <!-- 
    Microsoft ResX Schema 
    
    Version 2.0
    
    The primary goals of this format is to allow a simple XML format 
    that is mostly human readable. The generation and parsing of the 
    various data types are done through the TypeConverter classes 
    associated with the data types.
    
    Example:
    
    ... ado.net/XML headers & schema ...
    <resheader name="resmimetype">text/microsoft-resx</resheader>
    <resheader name="version">2.0</resheader>
    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
        <value>[base64 mime encoded serialized .NET Framework object]</value>
    </data>
    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
        <comment>This is a comment</comment>
    </data>
                
    There are any number of "resheader" rows that contain simple 
    name/value pairs.
    
    Each data row contains a name, and value. The row also contains a 
    type or mimetype. Type corresponds to a .NET class that support 
    text/value conversion through the TypeConverter architecture. 
    Classes that don't support this are serialized and stored with the 
    mimetype set.
    
    The mimetype is used for serialized objects, and tells the 
    ResXResourceReader how to depersist the object. This is currently not 
    extensible. For a given mimetype the value must be set accordingly:
    
    Note - application/x-microsoft.net.object.binary.base64 is the format 
    that the ResXResourceWriter will generate, however the reader can 
    read any of the formats listed below.
    
    mimetype: application/x-microsoft.net.object.binary.base64
    value   : The object must be serialized with 
            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
            : and then encoded with base64 encoding.
    
    mimetype: application/x-microsoft.net.object.soap.base64
    value   : The object must be serialized with 
            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
            : and then encoded with base64 encoding.

    mimetype: application/x-microsoft.net.object.bytearray.base64
    value   : The object must be serialized into a byte array 
            : using a System.ComponentModel.TypeConverter
            : and then encoded with base64 encoding.
    -->
  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
    <xsd:element name="root" msdata:IsDataSet="true">
      <xsd:complexType>
        <xsd:choice maxOccurs="unbounded">
          <xsd:element name="metadata">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" />
              </xsd:sequence>
              <xsd:attribute name="name" use="required" type="xsd:string" />
              <xsd:attribute name="type" type="xsd:string" />
              <xsd:attribute name="mimetype" type="xsd:string" />
              <xsd:attribute ref="xml:space" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="assembly">
            <xsd:complexType>
              <xsd:attribute name="alias" type="xsd:string" />
              <xsd:attribute name="name" type="xsd:string" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="data">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
              <xsd:attribute ref="xml:space" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="resheader">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" />
            </xsd:complexType>
          </xsd:element>
        </xsd:choice>
      </xsd:complexType>
    </xsd:element>
  </xsd:schema>
  <resheader name="resmimetype">
    <value>text/microsoft-resx</value>
  </resheader>
  <resheader name="version">
    <value>2.0</value>
  </resheader>
  <resheader name="reader">
    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <resheader name="writer">
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
  <data name="pictureBoxBase.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
    <value>
        /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwg
        JC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIy
        MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCABkAGQDASIAAhEBAxEB/8QA
        HwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIh
        MUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVW
        V1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXG
        x8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQF
        BgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAV
        YnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOE
        hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq
        8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDs6KKK+mPw0KKKKADpVDV9e0vw3ClzrE4hRlLxQkEvNjoAACcH
        pnp15o17XLTwtoMmt30bTwrIIY4IzhncjI69AOv4dK8ZtYdU+KvjdpZH8uEfOwYllhhDfdA/4FwOK83G
        41Uk1H5n2GQZAsQlicR8PRd/XyPQfDfxH/tme7l1uzj0/TnkZbK7jt2Ee7jajsMj3zXadgQQVIDKQQQQ
        RkEEcEH1FSQ6DpkOiro62cDWSpt8vygAxxgtj1rHsLv+zdRh8MX4Zp2z/Zs6tlTAM7Y2zjBGD0z2rzMs
        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
        /9k=
</value>
  </data>
</root>

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer (Senior)
Singapore Singapore
Coder. Hacker. Fixer.

Comments and Discussions