【C#】RGB转CMYK

由于目前印兔项目中的在线设计功能设计出来的产品颜色模式不确定,但是客户设计出来的产品需要发送到印厂的客户端去下载并且印刷,只有CMYK颜色模式的产品才能正确印刷,所以需要判断产品的颜色模式是否为CMYK,如果不是就将产品的颜色模式转为CMYK模式。

首先需判断目前产品的颜色模式

1 Image img = Bitmap.FromFile("图片路径", true);
2
3 PixelFormat pf = (PixelFormat)img.PixelFormat;
4 if (pf.ToString() == "8207")
5 {
6     MessageBox.Show("图片是CMYK模式!");
7 }

因为img.PixelFormat的返回值为Format8bppIndexed 灰度模式,在遇到RGB等其他颜色模式时返回“Format24bppRgb”,但是在遇到CMYK模式的图片是返回“8207”

我刚开始以为还要算法,因为CMYK转RGB有对应的算法,但是没有找到RGB转CMYK的算法,所以就想把CMYK转RGB的公式反推回去,结果被安排了 /笑哭 (算法啥的本人都没接触过,有啥不对的大家就喷吧 /阴险)

后来找到了对应的RGB转CMYK的算法

c‘=255-r;
m‘=255-g;
y‘=255-b;
k=min(c‘,m‘,y‘);
c=c‘-k;
m=m‘-k;
y=y‘-k;

R‘ =R/255
G‘ =G/255
B‘ = B/255
K= 1-max(R‘,G‘,B‘)
C= (1-R‘-K) / (1-K)
M= (1-G‘-K) / (1-K)
Y= (1-B‘-K) / (1-K)

找了两个,算出值需要省略小数点后不需要的,乘100就好

然后又了解到magick.net,用NuGet可以直接引用到项目中

 MagickImage magickImage = new MagickImage("图片路径");
 //MessageBox.Show(magickImage.ColorSpace.ToString());
 //magickImage.TransformColorSpace(ColorProfile.AdobeRGB1998);
 //magickImage.Settings.ColorSpace = ImageMagick.ColorSpace.CMYK;
 magickImage.ColorSpace = ColorSpace.CMYK;
 string path = @"D:\cmyk" + ((TimeSpan)(DateTime.Now.ToUniversalTime() - new DateTime(1970, 1, 1))).TotalMilliseconds + ".jpg";

 magickImage.Write(path);
 magickImage.Dispose();
 MessageBox.Show("图片已转换CMYK模式!\n 路径:" + path);

就简单的几句代码就OK了

本人技术不精,就是个人研究,也不确定这样写是不是正确,只是作为个人的一个积累,也希望给后边的人一个借鉴,坐等大佬安排 !!!

原文地址:https://www.cnblogs.com/caijiabao/p/10554340.html

时间: 2024-08-29 17:24:34

【C#】RGB转CMYK的相关文章

RGB,CMYK,HSB各种颜色表示的转换 C#语言

Introduction Why an article on "colors"? It's the same question I asked myself before writing this series. The fact is, in .NET, there are only two color formats that can be used: the RGB color model and the HSB color model. Those two are encaps

颜色空间RGB与HSV(HSL)的转换

转自:http://blog.csdn.net/jiangxinyu/article/details/8000999 一般的3D编程只需要使用RGB颜色空间就好了,但其实美术人员更多的是使用HSV(HSL),因为可以方便的调整饱和度和亮度. 有时候美术需要程序帮助调整饱和度来达到特定风格的渲染效果,这时候就需要转换颜色空间了. 出处:http://zh.wikipedia.org/wiki/HSL%E5%92%8CHSV%E8%89%B2%E5%BD%A9%E7%A9%BA%E9%97%B4 H

CMYK

前面我们都在学习有关RGB的内容,RGB色彩模式是最基础的色彩模式,所以RGB色彩模式是一个重要的模式.只要在电脑屏幕上显示的图像,就一定是以RGB模式.因为显示器的物理结构就是遵循RGB的.我们还接触了灰度色彩模式,它有自身的一些特性,使得它也被应用在了对通道的描述上.以后还会学到有关它其他的应用.除此之外还有一种CMYK色彩模式也很重要.CMYK也称作印刷色彩模式,顾名思义就是用来印刷的.它和RGB相比有一个很大的不同:RGB模式是一种发光的色彩模式,你在一间黑暗的房间内仍然可以看见屏幕上的

RGB/YUV/YCbCr--关于显示,颜色你需要了解的一些事

本文来自:我爱研发网(52RD.com) - R&D大本营 详细出处:http://www.52rd.com/Blog/Detail_RD.Blog_SHRDFresh_64107.html 工作中常听说RGB/YUV/YCbCr 这样一些名词,概念上似乎很混淆?这里是一个简介,部分内容来自wiki,理解不对的地方欢迎指正. A:首先两个基本概念: Color model和Color Space. 1. Color Model: 为了表达人眼观察到的颜色,人们从数学模型上定义了一系列不同的col

【转】LaTeX 符号命令大全

函数.符号及特殊字符 声调 语法 效果 语法 效果 语法 效果 \bar{x} \acute{\eta} \check{\alpha} \grave{\eta} \breve{a} \ddot{y} \dot{x} \hat{\alpha} \tilde{\iota} 函数 语法 效果 语法 效果 语法 效果 \sin\theta \cos\theta \tan\theta \arcsin\frac{L}{r} \arccos\frac{T}{r} \arctan\frac{L}{T} \sin

OpenCV2.4+遍历读写像素方法总结及时间度量

以下文本及代码基本基于<OpenCV 2.4.13.0 documentation>的How to scan images, lookup tables and time measurement with OpenCV一节,英文好的同学可以直接看原文. 1. 颜色压缩 颜色压缩(Color Reduction)最简单的理解就是减少表示图像的颜色数目,我们都知道,8位位深的3通道RGB真彩图像包括了1600多万(16777216)的颜色数目,其实在某些应用中用不到这么多数量(例如图像传输(tra

android中的图像处理

现在的移动手机内存越来越大,但是我们在开发时任然需要对我们的应用的内存经行把控,对于内存中的图像,如果 占用的内存太大,不及时释放或者对图片经行压缩,仍然会出现OOM异常 对于图片的加载,显示,处理,现在有许多第三方的工具类,如比较有名的Xutils,或者开源的框架如Universial Image Loader等等,这里不一一例举. 我们先看下图像的相关东西 颜色模型    对于常见的颜色模型,也就RGB,CMYK,YUV,ARGB.大多数API都采用RGB模型,android的API一般采用

iOS开发系列--绘图与滤镜全面解析

概述 在iOS中可以很容易的开发出绚丽的界面效果,一方面得益于成功系统的设计,另一方面得益于它强大的开发框架.今天我们将围绕iOS中两大图形.图形绘图框架进行介绍:Quartz 2D绘制2D图形和Core Image中强大的滤镜功能. Quartz 2D 基本图形绘制 视图刷新 其他图形上下文 Core Image Quartz 2D 在iOS中常用的绘图框架就是Quartz 2D,Quartz 2D是Core Graphics框架的一部分,是一个强大的二维图像绘制引擎.Quartz 2D在UI

iOS:Cocoa编码规范 -[译]Coding Guidelines for Cocoa

--原文地址:https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CodingGuidelines/Articles/FrameworkImpl.html Cocoa编码规范 --前言 用公共API开发一个Cocoa框架,插件,或其他可执行目标,里面的命名编写和规范不同于一般应用程序的开发.因为你开发出来东西是给开发者用的看的,并且他们不熟悉你的编程接口.这个时候API的命名约定就派上用场了,因为它使你的写