兄弟们,兄弟们,先来占个位。ZPL图片(懂得都懂)压缩算法被我整明白了。
先来放个代码块请各位期待一手。
public int ConvertToGray(int pixel)
{
int redValue = (pixel & 16711680) >> 16;
int greenValue = (pixel & 65280) >> 8;
int blueValue = pixel & 255;
int grayscaleValue = (redValue * 30 + greenValue * 59 + blueValue * 11) / 100;
if (grayscaleValue > 255)
{
grayscaleValue = 255;
}
else if (grayscaleValue < 0)
{
grayscaleValue = 0;
}
return grayscaleValue;
}
(此代码仅做黑白图片转换,仅为压缩路上的一环)
与下面的无关
又可以增加几期csdn文章了,各位多多关注,敬请期待后续。。。
下方的代码为黑白图直转zpl图片数据。。。。需要了解更多请多多关注哦。😘
/// <summary>
/// 获取zpl
/// </summary>
/// <param name="bitmap"></param>
/// <returns></returns>
public static string GetZPLPic(this Bitmap bitmap)
{
try
{
var imgStr = new StringBuilder();
for (int h = 0; h < bitmap.Height; h++)
{
var n = 0;//从bmp图片中统计8个像素到一个zpl数据中
var zplPixel = 0;
for (int w = 0; w < bitmap.Width; w++)
{
n++;
var pc = bitmap.GetPixel(w, h);
//(R+G+B)/3 单像素数据灰度 0.114B + 0.587G + 0.299R bitmapData.Stride = width * 3; 255白色 0 //黑色
//例如,若图形图像的前 4 个点为白色,而紧接着的四个点为黑色,则相应的逐点二进制编码为 00001111。此一个十六进制串表示8个像素
// var d = (pc.R + pc.G + pc.B) / 3;
var d = 0.114 * pc.B + 0.587 * pc.G + 0.299 * pc.R;//计算灰度值 0.114B + 0.587G + 0.299R
zplPixel *= 2;
if (d < 187f)//反色 实际图片中接近0为黑色,zpl中接近0为白色。
{
zplPixel++;
}
if (n >= 8)
{
string value = zplPixel.ToString("X2");
imgStr.Append(value);
n = 0;
zplPixel = 0;
}
}
if (n > 0 && n <= 8)
{
zplPixel *= (2 ^ 8 - n);
imgStr.Append(zplPixel.ToString("X2"));
n = 0;
zplPixel = 0;
}
}
return imgStr.ToString();
}
catch (Exception ex)
{
return "";
}
}
(zpl图片数据直转,不建议生产用,预览可以,转换稍慢,如果各位不介意速度可以尝试一下)
以上两个代码可将bmp图片转换为zpl图片数据块,后续压缩算法将在研究之中,先立个flag,过年前汇总一篇完整的zpl压缩介绍(偷偷的)!
PS:代码已脱敏,不涉及任何商业机密。
不过插一嘴,官方也是用的下面这种方法。