
图像rip 挂网 灰度图转单色,2bit图
图像rip 挂网 灰度图转单色,2bit图,通常彩色打印,印刷,需要Tiff 图并为cmyk印刷模式,软件会将其分离成4通道8位灰度图,如果图像不是cmyk模式图而是rgb图,则需要将rgb转为cmyk
·
[TOC](图像rip 挂网 灰度图转单色,2bit图)
tiff 彩色 CMYK打印
通常彩色打印,印刷,需要Tiff 图并为cmyk印刷模式,软件会将其分离成4通道8位灰度图,如果图像不是cmyk模式图而是rgb图,则需要将rgb转为cmyk,如下c++代码
///RGB转cmyk 此方法做了8倍宽度对齐
static void rgbtocmyk(BYTE* &rgb, BYTE*& buf_c, BYTE*& buf_m, BYTE*& buf_y, BYTE*&buf_k, int &w, int &h)
{
BYTE* buf_rgb = rgb + 54;
int linewidth = (((BITMAPINFO*)(rgb + sizeof(BITMAPFILEHEADER)))->bmiHeader.biWidth * 24 + 31) / 32 * 4;
w = ((BITMAPINFO*)(rgb + sizeof(BITMAPFILEHEADER)))->bmiHeader.biWidth / 8 * 8;
h = ((BITMAPINFO*)(rgb + sizeof(BITMAPFILEHEADER)))->bmiHeader.biHeight;
buf_c = (BYTE*)malloc(w*h);
buf_m = (BYTE*)malloc(w*h);
buf_y = (BYTE*)malloc(w*h);
buf_k = (BYTE*)malloc(w*h);
memset(buf_c, 0x255, w*h);
memset(buf_m, 0x255, w*h);
memset(buf_y, 0x255, w*h);
memset(buf_k, 0x255, w*h);
for (int i = h - 1; i >= 0; i--)
{
for (int j = 0; j < w * 3; j += 3)
{
int b = buf_rgb[i*linewidth + j];
int g = buf_rgb[i*linewidth + j + 1];
int r = buf_rgb[i*linewidth + j + 2];
float r1 = r / 255.0;
float g1 = g / 255.0;
float b1 = b / 255.0;
float k1 = 1 - max(b1, max(r1, g1));
buf_c[i*w + j / 3] = 255- ( (1-r1-k1)/(1-k1)*255);
buf_m[i*w + j / 3] =255- ((1 - g1 - k1) / (1 - k1) * 255);
buf_y[i*w + j / 3] =255- ( (1 - b1 - k1) / (1 - k1) * 255);
buf_k[i*w + j / 3] =255-( k1*255);
}
}
}
cmyk 4通道灰度图提取
void myrip::getCMYK_Tiff(const char* path, BYTE* &Cmage, BYTE* &Mmage, BYTE* &Ymage, BYTE* &Kmage, int &newWidth, int &height)
{
int allbuffsize;
int width;
TIFF* tif = TIFFOpen(path, "r");
TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &height);
TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &width);
int perlines = TIFFScanlineSize(tif);
BYTE* cmykbuf = (BYTE*)malloc(perlines*height);
for (int i = 0; i < height; i++)
{
TIFFReadScanline(tif, cmykbuf + i*perlines, i);
}
newWidth = width / 8 * 8;
Cmage = (BYTE*)malloc((newWidth * 8 + 31) / 32 * 4 * height);
//memset(Cmage, 0x0, width*height);
Mmage = (BYTE*)malloc((newWidth * 8 + 31) / 32 * 4 * height);
Ymage = (BYTE*)malloc((newWidth * 8 + 31) / 32 * 4 * height);
Kmage = (BYTE*)malloc((newWidth * 8 + 31) / 32 * 4 * height);
int grayPerline = (newWidth * 8 + 31) / 32 * 4;
for (int i = 0; i <height; i++)
{
for (int j = 0; j < newWidth; j++)
{
Cmage[(height - 1 - i)*grayPerline + j] = cmykbuf[i*perlines + j * (perlines / width)];
Mmage[(height - 1 - i)*grayPerline + j] = cmykbuf[i*perlines + j * (perlines / width) + 1];
Ymage[(height - 1 - i)*grayPerline + j] = cmykbuf[i*perlines + j * (perlines / width) + 2];
Kmage[(height - 1 - i)*grayPerline + j] = cmykbuf[i*perlines + j * (perlines / width) + 3];
}
}
free(cmykbuf);
TIFFClose(tif);
}
8位灰度图转单色(二值图仅0和255),3级灰度图,后续转为2bit图,进行彩色印刷,打印。如简单的进行阈值二值化,或者通过抖动则效果差很多,以下是挂网后图效果。
1、原始灰度图
2、3级灰度图 里面包含 0,85,170三个灰度等级
软件下载测试效果:
https://download.csdn.net/download/janedew/87749577
更多推荐
所有评论(0)