fuck the "bit map"
This commit is contained in:
parent
d3b95505a7
commit
58abf9a02e
|
@ -7,6 +7,7 @@ using System.Drawing;
|
||||||
using System.Drawing.Imaging;
|
using System.Drawing.Imaging;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Windows.Media.Imaging;
|
using System.Windows.Media.Imaging;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
namespace sharperang {
|
namespace sharperang {
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -16,6 +17,50 @@ namespace sharperang {
|
||||||
private LogBridge logger;
|
private LogBridge logger;
|
||||||
private USBPrinter printer=new USBPrinter();
|
private USBPrinter printer=new USBPrinter();
|
||||||
private Bitmap bimg;
|
private Bitmap bimg;
|
||||||
|
|
||||||
|
public static Bitmap ConvertTo1Bit(Bitmap input) {
|
||||||
|
byte[] masks = new byte[] { 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01 };
|
||||||
|
Bitmap output = new Bitmap(input.Width, input.Height, PixelFormat.Format1bppIndexed);
|
||||||
|
sbyte[,] data = new sbyte[input.Width, input.Height];
|
||||||
|
BitmapData inputData = input.LockBits(new Rectangle(0, 0, input.Width, input.Height), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);
|
||||||
|
try {
|
||||||
|
IntPtr scanLine = inputData.Scan0;
|
||||||
|
byte[] line = new byte[inputData.Stride];
|
||||||
|
for (int y = 0; y < inputData.Height; y++, scanLine += inputData.Stride) {
|
||||||
|
Marshal.Copy(scanLine, line, 0, line.Length);
|
||||||
|
for (int x = 0; x < input.Width; x++) {
|
||||||
|
data[x, y] = (sbyte)(64 * (GetGreyLevel(line[(x * 3) + 2], line[(x * 3) + 1], line[(x * 3) + 0]) - 0.5));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
input.UnlockBits(inputData);
|
||||||
|
}
|
||||||
|
BitmapData outputData = output.LockBits(new Rectangle(0, 0, output.Width, output.Height), ImageLockMode.WriteOnly, PixelFormat.Format1bppIndexed);
|
||||||
|
try {
|
||||||
|
IntPtr scanLine = outputData.Scan0;
|
||||||
|
for (int y = 0; y < outputData.Height; y++, scanLine += outputData.Stride) {
|
||||||
|
byte[] line = new byte[outputData.Stride];
|
||||||
|
for (int x = 0; x < input.Width; x++) {
|
||||||
|
bool j = data[x, y] > 0;
|
||||||
|
if (j) line[x / 8] |= masks[x % 8];
|
||||||
|
sbyte error = (sbyte)(data[x, y] - (j ? 32 : -32));
|
||||||
|
if (x < input.Width - 1) data[x + 1, y] += (sbyte)(7 * error / 16);
|
||||||
|
if (y < input.Height - 1) {
|
||||||
|
if (x > 0) data[x - 1, y + 1] += (sbyte)(3 * error / 16);
|
||||||
|
data[x, y + 1] += (sbyte)(5 * error / 16);
|
||||||
|
if (x < input.Width - 1) data[x + 1, y + 1] += (sbyte)(1 * error / 16);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Marshal.Copy(line, 0, scanLine, outputData.Stride);
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
output.UnlockBits(outputData);
|
||||||
|
}
|
||||||
|
return output;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static double GetGreyLevel(byte r, byte g, byte b) => ((r * 0.299) + (g * 0.587) + (b * 0.114)) / 255;
|
||||||
|
|
||||||
public MainWindow() {
|
public MainWindow() {
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
logger = new LogBridge();
|
logger = new LogBridge();
|
||||||
|
@ -62,30 +107,16 @@ namespace sharperang {
|
||||||
|
|
||||||
private void BtLoadImage_Click(object sender, RoutedEventArgs e) {
|
private void BtLoadImage_Click(object sender, RoutedEventArgs e) {
|
||||||
bimg=new Bitmap("C:/Users/maff/Downloads/Sqrl - Kid Maff (Vectorised).png");
|
bimg=new Bitmap("C:/Users/maff/Downloads/Sqrl - Kid Maff (Vectorised).png");
|
||||||
int w=bimg.Width; int h=bimg.Height;float rt=(float)w/h;
|
bimg=new Bitmap(bimg, 384, 543);
|
||||||
h=(int)(384*rt);
|
Bitmap fimg=new Bitmap(768, 543);
|
||||||
bimg=new Bitmap(bimg, 384, h);
|
for(int h=0;h<bimg.Height;h++) {
|
||||||
Bitmap tmp = new Bitmap(bimg.Width, bimg.Height, PixelFormat.Format1bppIndexed);
|
for(int w=0;w<384;w++) {
|
||||||
int width = bimg.Width;
|
fimg.SetPixel(w, h, bimg.GetPixel(w, h));
|
||||||
int height = bimg.Height;
|
|
||||||
Color p;
|
|
||||||
for (int y = 0; y < height; y++) {
|
|
||||||
for (int x = 0; x < width; x++) {
|
|
||||||
p = bimg.GetPixel(x, y);
|
|
||||||
int a = p.A;
|
|
||||||
int r = p.R;
|
|
||||||
int g = p.G;
|
|
||||||
int b = p.B;
|
|
||||||
int avg = (int)(0.2989*r + 0.5870*g + 0.1140*b)/3;
|
|
||||||
avg = avg < 128 ? 0 : 255;
|
|
||||||
bimg.SetPixel(x, y, Color.FromArgb(a, avg, avg, avg));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Bitmap tmp = ConvertTo1Bit(fimg);
|
||||||
byte[] img;
|
byte[] img;
|
||||||
using (MemoryStream s = new MemoryStream()) {
|
|
||||||
tmp.Save(s, System.Drawing.Imaging.ImageFormat.Bmp);
|
|
||||||
img=s.ToArray();
|
|
||||||
}
|
|
||||||
printer.PrintBytes(img, false);
|
printer.PrintBytes(img, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue