{"id":395,"date":"2009-11-13T10:49:45","date_gmt":"2009-11-13T08:49:45","guid":{"rendered":"http:\/\/mariusbancila.ro\/blog\/?p=395"},"modified":"2011-05-20T15:28:07","modified_gmt":"2011-05-20T13:28:07","slug":"using-colormatrix-for-creating-negative-image","status":"publish","type":"post","link":"https:\/\/mariusbancila.ro\/blog\/2009\/11\/13\/using-colormatrix-for-creating-negative-image\/","title":{"rendered":"Using ColorMatrix for Creating Negative Image"},"content":{"rendered":"<p>.NET provides two classes for image transformations: Matrix, used for geometric transformations, and ColorMatrix, used for color transformations. <\/p>\n<p>One of such color transformations is inverting or negating. This means subtracting each color component from 255. Black (0,0,0) becomes White (255, 255, 255), and Green (0, 255, 0) becomes Magenta (255, 0, 255). <\/p>\n<p>You can find many examples on the web that look like this:<\/p>\n<pre name=\"code\" class=\"csharp\">\r\npublic Bitmap Transform(Bitmap source)\r\n{\r\n    \/\/create a blank bitmap the same size as original\r\n    Bitmap newBitmap = new Bitmap(source.Width, source.Height);\r\n\r\n    \/\/get a graphics object from the new image\r\n    Graphics g = Graphics.FromImage(newBitmap);\r\n\r\n    \/\/ create the negative color matrix\r\n    ColorMatrix colorMatrix = new ColorMatrix();\r\n    colorMatrix.Matrix00 = colorMatrix.Matrix11 = colorMatrix.Matrix22 = -1f;\r\n    colorMatrix.Matrix33 = colorMatrix.Matrix44 = 1f;\r\n\r\n    \/\/ create some image attributes\r\n    ImageAttributes attributes = new ImageAttributes();\r\n\r\n    attributes.SetColorMatrix(colorMatrix);\r\n\r\n    g.DrawImage(source, new Rectangle(0, 0, source.Width, source.Height),\r\n                0, 0, source.Width, source.Height, GraphicsUnit.Pixel, attributes);\r\n\r\n    \/\/dispose the Graphics object\r\n    g.Dispose();\r\n\r\n    return newBitmap;\r\n}\r\n<\/pre>\n<p>Using this code one can get a negative image.<br \/>\n<figure style=\"width: 477px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" alt=\"Original image\" src=\"\/blog\/wp-content\/uploads\/2009\/11\/negativesample1.jpg\" title=\"Original image\" width=\"487\" height=\"396\" \/><figcaption class=\"wp-caption-text\">Original image<\/figcaption><\/figure><\/p>\n<figure style=\"width: 477px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" alt=\"Negative image\" src=\"\/blog\/wp-content\/uploads\/2009\/11\/negativesample3.jpg\" title=\"Negative image\" width=\"487\" height=\"396\" \/><figcaption class=\"wp-caption-text\">Negative image<\/figcaption><\/figure>\n<p>This runs fine on Windows XP. But when I ran it on Windows 7, I was getting only a black image. All the pixels were ARGB(255, 0, 0, 0). This was how it looked:<\/p>\n<figure style=\"width: 475px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" alt=\"Incorrectly transformed image\" src=\"\/blog\/wp-content\/uploads\/2009\/11\/negativesample2.jpg\" title=\"Incorrectly transformed image\" width=\"485\" height=\"395\" \/><figcaption class=\"wp-caption-text\">Incorrectly transformed image<\/figcaption><\/figure>\n<p>I was surprised to learn that it worked on Windows XP, but not on Windows 7. I don&#8217;t have Windows Vista to test but I guess it&#8217;s the same as with Windows 7. I thought it must be something in the GDI+ library, because building with .NET 3.5 SP1 or 4.0 Beta 2 didn&#8217;t change a thing.<\/p>\n<p>After trying different things, I figured out what the problem was: the color matrix was incorrect. It must be defined like this:<\/p>\n<pre name=\"code\" class=\"csharp\">\r\nColorMatrix colorMatrix = new ColorMatrix(\r\n   new float[][]\r\n   {\r\n      new float[] {-1, 0, 0, 0, 0},\r\n      new float[] {0, -1, 0, 0, 0},\r\n      new float[] {0, 0, -1, 0, 0},\r\n      new float[] {0, 0, 0, 1, 0},\r\n      new float[] {1, 1, 1, 0, 1}\r\n   });\r\n<\/pre>\n<p>With this change the Transform function produces a correct negative image, regardless the operating system or the .NET framework version. <\/p>\n<p>However, what I don&#8217;t know yet, is why it worked on Windows XP. The only conclusion I can draw is that the GDI+ implementation has a fault there, that was later corrected. That&#8217;s why an incorrect color matrix produced a correct transformation on Windows XP.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>.NET provides two classes for image transformations: Matrix, used for geometric transformations, and ColorMatrix, used for color transformations. One of such color transformations is inverting or negating. This means subtracting each color component from 255. Black (0,0,0) becomes White (255, 255, 255), and Green (0, 255, 0) becomes Magenta (255, 0, 255). You can find &#8230; <a title=\"Using ColorMatrix for Creating Negative Image\" class=\"read-more\" href=\"https:\/\/mariusbancila.ro\/blog\/2009\/11\/13\/using-colormatrix-for-creating-negative-image\/\" aria-label=\"Read more about Using ColorMatrix for Creating Negative Image\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_uag_custom_page_level_css":"","advgb_blocks_editor_width":"","advgb_blocks_columns_visual_guide":"","_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[13,11],"tags":[451,174,173,172,175],"class_list":["post-395","post","type-post","status-publish","format-standard","hentry","category-net","category-csharp","tag-c","tag-colormatrix","tag-image","tag-negative","tag-transformation"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"The correct ColorMatrix for transformation that produces a negative image, regardless the operating system or the .NET framework version.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Marius Bancila\"\/>\n\t<meta name=\"keywords\" content=\"c#,.net,negative,image,transformation,colormatrix,c++\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/mariusbancila.ro\/blog\/2009\/11\/13\/using-colormatrix-for-creating-negative-image\/\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Marius Bancila&#039;s Blog | About code. Mostly on C++\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Using ColorMatrix for Creating Negative Image\" \/>\n\t\t<meta property=\"og:description\" content=\"The correct ColorMatrix for transformation that produces a negative image, regardless the operating system or the .NET framework version.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/mariusbancila.ro\/blog\/2009\/11\/13\/using-colormatrix-for-creating-negative-image\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2009-11-13T08:49:45+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2011-05-20T13:28:07+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Using ColorMatrix for Creating Negative Image\" \/>\n\t\t<meta name=\"twitter:description\" content=\"The correct ColorMatrix for transformation that produces a negative image, regardless the operating system or the .NET framework version.\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2009\\\/11\\\/13\\\/using-colormatrix-for-creating-negative-image\\\/#article\",\"name\":\"Using ColorMatrix for Creating Negative Image\",\"headline\":\"Using ColorMatrix for Creating Negative Image\",\"author\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/author\\\/admin\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/#organization\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"\\\/blog\\\/wp-content\\\/uploads\\\/2009\\\/11\\\/negativesample1.jpg\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2009\\\/11\\\/13\\\/using-colormatrix-for-creating-negative-image\\\/#articleImage\"},\"datePublished\":\"2009-11-13T10:49:45+02:00\",\"dateModified\":\"2011-05-20T15:28:07+02:00\",\"inLanguage\":\"en-US\",\"commentCount\":4,\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2009\\\/11\\\/13\\\/using-colormatrix-for-creating-negative-image\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2009\\\/11\\\/13\\\/using-colormatrix-for-creating-negative-image\\\/#webpage\"},\"articleSection\":\".NET, C#, C++, ColorMatrix, image, negative, transformation\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2009\\\/11\\\/13\\\/using-colormatrix-for-creating-negative-image\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/#listItem\",\"name\":\"IT\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/#listItem\",\"position\":2,\"name\":\"IT\",\"item\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/#listItem\",\"name\":\"Software\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/#listItem\",\"position\":3,\"name\":\"Software\",\"item\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/net\\\/#listItem\",\"name\":\".NET\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/#listItem\",\"name\":\"IT\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/net\\\/#listItem\",\"position\":4,\"name\":\".NET\",\"item\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/net\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/net\\\/csharp\\\/#listItem\",\"name\":\"C#\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/#listItem\",\"name\":\"Software\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/net\\\/csharp\\\/#listItem\",\"position\":5,\"name\":\"C#\",\"item\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/net\\\/csharp\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2009\\\/11\\\/13\\\/using-colormatrix-for-creating-negative-image\\\/#listItem\",\"name\":\"Using ColorMatrix for Creating Negative Image\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/net\\\/#listItem\",\"name\":\".NET\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2009\\\/11\\\/13\\\/using-colormatrix-for-creating-negative-image\\\/#listItem\",\"position\":6,\"name\":\"Using ColorMatrix for Creating Negative Image\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/net\\\/csharp\\\/#listItem\",\"name\":\"C#\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/#organization\",\"name\":\"Marius Bancila's Blog\",\"description\":\"About code. Mostly on C++\",\"url\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/author\\\/admin\\\/#author\",\"url\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/author\\\/admin\\\/\",\"name\":\"Marius Bancila\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2009\\\/11\\\/13\\\/using-colormatrix-for-creating-negative-image\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a84dd2831d955c38355ddea55df4df260809b88f36408bc14fd4eab8f7f131c9?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"Marius Bancila\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2009\\\/11\\\/13\\\/using-colormatrix-for-creating-negative-image\\\/#webpage\",\"url\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2009\\\/11\\\/13\\\/using-colormatrix-for-creating-negative-image\\\/\",\"name\":\"Using ColorMatrix for Creating Negative Image\",\"description\":\"The correct ColorMatrix for transformation that produces a negative image, regardless the operating system or the .NET framework version.\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2009\\\/11\\\/13\\\/using-colormatrix-for-creating-negative-image\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/author\\\/admin\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/author\\\/admin\\\/#author\"},\"datePublished\":\"2009-11-13T10:49:45+02:00\",\"dateModified\":\"2011-05-20T15:28:07+02:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/\",\"name\":\"Marius Bancila's Blog\",\"description\":\"About code. Mostly on C++\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Using ColorMatrix for Creating Negative Image","description":"The correct ColorMatrix for transformation that produces a negative image, regardless the operating system or the .NET framework version.","canonical_url":"https:\/\/mariusbancila.ro\/blog\/2009\/11\/13\/using-colormatrix-for-creating-negative-image\/","robots":"max-image-preview:large","keywords":"c#,.net,negative,image,transformation,colormatrix,c++","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/mariusbancila.ro\/blog\/2009\/11\/13\/using-colormatrix-for-creating-negative-image\/#article","name":"Using ColorMatrix for Creating Negative Image","headline":"Using ColorMatrix for Creating Negative Image","author":{"@id":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/#author"},"publisher":{"@id":"https:\/\/mariusbancila.ro\/blog\/#organization"},"image":{"@type":"ImageObject","url":"\/blog\/wp-content\/uploads\/2009\/11\/negativesample1.jpg","@id":"https:\/\/mariusbancila.ro\/blog\/2009\/11\/13\/using-colormatrix-for-creating-negative-image\/#articleImage"},"datePublished":"2009-11-13T10:49:45+02:00","dateModified":"2011-05-20T15:28:07+02:00","inLanguage":"en-US","commentCount":4,"mainEntityOfPage":{"@id":"https:\/\/mariusbancila.ro\/blog\/2009\/11\/13\/using-colormatrix-for-creating-negative-image\/#webpage"},"isPartOf":{"@id":"https:\/\/mariusbancila.ro\/blog\/2009\/11\/13\/using-colormatrix-for-creating-negative-image\/#webpage"},"articleSection":".NET, C#, C++, ColorMatrix, image, negative, transformation"},{"@type":"BreadcrumbList","@id":"https:\/\/mariusbancila.ro\/blog\/2009\/11\/13\/using-colormatrix-for-creating-negative-image\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/#listItem","position":1,"name":"Home","item":"https:\/\/mariusbancila.ro\/blog\/","nextItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/#listItem","name":"IT"}},{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/#listItem","position":2,"name":"IT","item":"https:\/\/mariusbancila.ro\/blog\/category\/it\/","nextItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/#listItem","name":"Software"},"previousItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/#listItem","position":3,"name":"Software","item":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/","nextItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/net\/#listItem","name":".NET"},"previousItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/#listItem","name":"IT"}},{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/net\/#listItem","position":4,"name":".NET","item":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/net\/","nextItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/net\/csharp\/#listItem","name":"C#"},"previousItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/#listItem","name":"Software"}},{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/net\/csharp\/#listItem","position":5,"name":"C#","item":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/net\/csharp\/","nextItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/2009\/11\/13\/using-colormatrix-for-creating-negative-image\/#listItem","name":"Using ColorMatrix for Creating Negative Image"},"previousItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/net\/#listItem","name":".NET"}},{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/2009\/11\/13\/using-colormatrix-for-creating-negative-image\/#listItem","position":6,"name":"Using ColorMatrix for Creating Negative Image","previousItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/net\/csharp\/#listItem","name":"C#"}}]},{"@type":"Organization","@id":"https:\/\/mariusbancila.ro\/blog\/#organization","name":"Marius Bancila's Blog","description":"About code. Mostly on C++","url":"https:\/\/mariusbancila.ro\/blog\/"},{"@type":"Person","@id":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/#author","url":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/","name":"Marius Bancila","image":{"@type":"ImageObject","@id":"https:\/\/mariusbancila.ro\/blog\/2009\/11\/13\/using-colormatrix-for-creating-negative-image\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/a84dd2831d955c38355ddea55df4df260809b88f36408bc14fd4eab8f7f131c9?s=96&d=mm&r=g","width":96,"height":96,"caption":"Marius Bancila"}},{"@type":"WebPage","@id":"https:\/\/mariusbancila.ro\/blog\/2009\/11\/13\/using-colormatrix-for-creating-negative-image\/#webpage","url":"https:\/\/mariusbancila.ro\/blog\/2009\/11\/13\/using-colormatrix-for-creating-negative-image\/","name":"Using ColorMatrix for Creating Negative Image","description":"The correct ColorMatrix for transformation that produces a negative image, regardless the operating system or the .NET framework version.","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/mariusbancila.ro\/blog\/#website"},"breadcrumb":{"@id":"https:\/\/mariusbancila.ro\/blog\/2009\/11\/13\/using-colormatrix-for-creating-negative-image\/#breadcrumblist"},"author":{"@id":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/#author"},"creator":{"@id":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/#author"},"datePublished":"2009-11-13T10:49:45+02:00","dateModified":"2011-05-20T15:28:07+02:00"},{"@type":"WebSite","@id":"https:\/\/mariusbancila.ro\/blog\/#website","url":"https:\/\/mariusbancila.ro\/blog\/","name":"Marius Bancila's Blog","description":"About code. Mostly on C++","inLanguage":"en-US","publisher":{"@id":"https:\/\/mariusbancila.ro\/blog\/#organization"}}]},"og:locale":"en_US","og:site_name":"Marius Bancila's Blog | About code. Mostly on C++","og:type":"article","og:title":"Using ColorMatrix for Creating Negative Image","og:description":"The correct ColorMatrix for transformation that produces a negative image, regardless the operating system or the .NET framework version.","og:url":"https:\/\/mariusbancila.ro\/blog\/2009\/11\/13\/using-colormatrix-for-creating-negative-image\/","article:published_time":"2009-11-13T08:49:45+00:00","article:modified_time":"2011-05-20T13:28:07+00:00","twitter:card":"summary","twitter:title":"Using ColorMatrix for Creating Negative Image","twitter:description":"The correct ColorMatrix for transformation that produces a negative image, regardless the operating system or the .NET framework version."},"aioseo_meta_data":{"post_id":"395","title":"Using ColorMatrix for Creating Negative Image","description":"The correct ColorMatrix for transformation that produces a negative image, regardless the operating system or the .NET framework version.","keywords":[{"label":"C#","value":"C#"},{"label":".NET","value":".NET"},{"label":"negative","value":"negative"},{"label":"image","value":"image"},{"label":"transformation","value":"transformation"},{"label":"ColorMatrix","value":"ColorMatrix"}],"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"location":null,"local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":null,"created":"2021-03-18 21:14:52","updated":"2025-12-12 07:30:16","seo_analyzer_scan_date":null,"focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"author_meta":{"display_name":"Marius Bancila","author_link":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/"},"featured_img":null,"jetpack_publicize_connections":[],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false},"uagb_author_info":{"display_name":"Marius Bancila","author_link":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/"},"uagb_comment_info":4,"uagb_excerpt":".NET provides two classes for image transformations: Matrix, used for geometric transformations, and ColorMatrix, used for color transformations. One of such color transformations is inverting or negating. This means subtracting each color component from 255. Black (0,0,0) becomes White (255, 255, 255), and Green (0, 255, 0) becomes Magenta (255, 0, 255). You can find&hellip;","coauthors":[],"tax_additional":{"categories":{"linked":["<a href=\"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/net\/\" class=\"advgb-post-tax-term\">.NET<\/a>","<a href=\"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/net\/csharp\/\" class=\"advgb-post-tax-term\">C#<\/a>"],"unlinked":["<span class=\"advgb-post-tax-term\">.NET<\/span>","<span class=\"advgb-post-tax-term\">C#<\/span>"]},"tags":{"linked":["<a href=\"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/net\/csharp\/\" class=\"advgb-post-tax-term\">C++<\/a>","<a href=\"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/net\/csharp\/\" class=\"advgb-post-tax-term\">ColorMatrix<\/a>","<a href=\"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/net\/csharp\/\" class=\"advgb-post-tax-term\">image<\/a>","<a href=\"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/net\/csharp\/\" class=\"advgb-post-tax-term\">negative<\/a>","<a href=\"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/net\/csharp\/\" class=\"advgb-post-tax-term\">transformation<\/a>"],"unlinked":["<span class=\"advgb-post-tax-term\">C++<\/span>","<span class=\"advgb-post-tax-term\">ColorMatrix<\/span>","<span class=\"advgb-post-tax-term\">image<\/span>","<span class=\"advgb-post-tax-term\">negative<\/span>","<span class=\"advgb-post-tax-term\">transformation<\/span>"]}},"comment_count":"4","relative_dates":{"created":"Posted 17 years ago","modified":"Updated 15 years ago"},"absolute_dates":{"created":"Posted on November 13, 2009","modified":"Updated on May 20, 2011"},"absolute_dates_time":{"created":"Posted on November 13, 2009 10:49 am","modified":"Updated on May 20, 2011 3:28 pm"},"featured_img_caption":"","series_order":"","jetpack_shortlink":"https:\/\/wp.me\/pYNdv-6n","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/posts\/395","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/comments?post=395"}],"version-history":[{"count":6,"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/posts\/395\/revisions"}],"predecessor-version":[{"id":873,"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/posts\/395\/revisions\/873"}],"wp:attachment":[{"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/media?parent=395"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/categories?post=395"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/tags?post=395"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}