1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
| string hex = "0000380038003800fe007c00380010000000fefe02020202020202020000000000005e5e0000000000003e3e101020202020101000001c1c2a2a2a2a2a2a1a1a0000000000000000000000000000fefe909090989094806200000004002a5e2a002a001e00003e0c10122012201210fe00001c002a002a5e2a001a000000101c10227e229022501c000000008200fe00020000000000200012820cfe108220000000003e001000200020001e0000fe20402030fc4022fe2400001c1c2a2a2a2a2a2a1a1a00000c3e121012201220fe100000003e00105e200020001e0000041c2a2a2a2a2a2a1e1a00000020002000fc00220024000062009200920092008c0000001c002a002a002a001a0000003e00100020002000100000003800040002000400380000001c002a002a002a001a0000003e0010002000200010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fc47fc6ffff7fc63fc4000000000000000000007fff7fff7fff60606060607070f83ffc3fde1f8f0f07000301f903fc07fe070e0e070e070e07070e07fe03fc01f8000007ff07ff07ff007000f801fc03de078f070706030401000007fc07fe07ff000f000700070007000e07fc07fe07ff00000000";
// Conversion de la chaine hexa en tableau d'octets
byte[] pixelsOn1Bit = HexToBytes(hex);
// On met les pixels sur 8 bits, plus facile à manipuler
byte[] pixelsOn8Bits = pixelsOn1Bit.SelectMany(b => Get8BitPixels(b)).ToArray();
Image img = CreateImage(280, 16, pixelsOn8Bits);
...
static IEnumerable<byte> Get8BitPixels(byte b)
{
byte[] bits = new byte[8];
byte mask = 0x80; // binaire 10000000
for (int i = 0; i < 8; i++)
{
bits[i] =
((b & mask) != 0)
? (byte)0 // pixel noir
: (byte)255; // pixel blanc
mask = (byte)(mask >> 1);
}
return bits;
}
static Image CreateImage(int width, int height, byte[] pixels)
{
// Format: 8 bits par pixel
PixelFormat format = PixelFormat.Format8bppIndexed;
// On crée une image vide de la taille voulue
// Pour l'instant on inverse largeur et hauteur (puisque les données en entrée sont "retournées")
// On retournera plus tard...
Bitmap bmp = new Bitmap(height, width, format);
BitmapData data = null;
try
{
// Copie des pixels vers l'image
Rectangle rect = new Rectangle(0, 0, height, width);
data = bmp.LockBits(rect, ImageLockMode.WriteOnly, format);
Marshal.Copy(pixels, 0, data.Scan0, pixels.Length);
}
finally
{
if (data != null)
bmp.UnlockBits(data);
}
// Retournement de l'image
bmp.RotateFlip(RotateFlipType.Rotate270FlipY);
return bmp;
}
static byte[] HexToBytes(string s)
{
using (var ms = new MemoryStream())
{
for (int i = 0; i < s.Length - 1; i += 2)
{
string hexByte = s.Substring(i, 2);
byte b = Convert.ToByte(hexByte, 16);
ms.WriteByte(b);
}
return ms.ToArray();
}
} |
Partager