public Bitmap merge(CodingMethod method) { int width = 0; int height = 0; Bitmap dst = null; for (int k = 7; k >= 0; k--) {// try to find output size if (this[k] != null) { width = Math.Max(width, this[k].Width); height = Math.Max(height, this[k].Height); } } if ((width == 0) || (height == 0)) { return(dst); } dst = new Bitmap(width, height); BitmapData[] srcDatas = bitPlanes.ToArray().Select(x => lockBimap(x, ImageLockMode.ReadOnly)).ToArray(); BitmapData dstData = dst.LockBits(MyF.bound(dst), ImageLockMode.WriteOnly, PixelFormat.Format24bppRgb); unsafe { byte *dstPtr = (byte *)dstData.Scan0; int skipByte = dstData.Stride - dstData.Width * 3; for (int j = 0; j < dstData.Height; j++) { for (int i = 0; i < dstData.Width; i++) { byte srcByte = getByte(srcDatas, i, j); switch (method) { case CodingMethod.GrayCode: srcByte = gray2Bin(srcByte); break; case CodingMethod.Binary: default: break; } dstPtr[0] = srcByte; dstPtr[1] = dstPtr[0]; dstPtr[2] = dstPtr[0]; dstPtr += 3; } dstPtr += skipByte; } } dst.UnlockBits(dstData); for (int i = 0; i < 8; i++) { if (bitPlanes[i] == null) { continue; } bitPlanes[i].UnlockBits(srcDatas[i]); } return(dst); }
private string[] GetResultListItem(string codeText, CodingMethod codingMethod) { var resultListItem = new string[3]; List <string> parsedCode = CodeParser.ParseIntoBitStrings(codeText, codingMethod.BitStringLength); resultListItem[0] = codingMethod.NameOfCode; resultListItem[1] = this.DecodeText(parsedCode, codingMethod); resultListItem[2] = String.Join(" ", parsedCode); return(resultListItem); }
private string DecodeText(List <string> bitStrings, CodingMethod method) { var decodedText = new StringBuilder(); foreach (var bitString in bitStrings) { if (String.IsNullOrWhiteSpace(bitString)) { decodedText.Append(" "); } else if (method.CodeKey.TryGetValue(bitString, out string matchedLetter)) { decodedText.Append(matchedLetter); } else { decodedText.Append("_"); } } return(decodedText.ToString()); }
public void froms(Bitmap src, CodingMethod method) { bitPlanes = getBitPlane(src, method); }
public static Bitmap[] getBitPlane(Bitmap src, CodingMethod method) { Bitmap[] planes = new Bitmap[8]; if (src == null) { return(planes); } for (int i = 0; i < 8; i++) { planes[i] = new Bitmap(src.Width, src.Height); //Debug.Print(BitMask[i].ToString() + " "); } BitmapData srcData = src.LockBits(MyF.bound(src), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb); BitmapData[] dstDatas = planes.ToArray().Select(x => x.LockBits(MyF.bound(x), ImageLockMode.WriteOnly, PixelFormat.Format24bppRgb)).ToArray(); if (srcData == null) { Debug.Print("no srcData"); return(planes); } unsafe { int skipByte = srcData.Stride - srcData.Width * 3; //Debug.Print(" " + skipByte + " " + srcData.Stride + " " + srcData.Width); //int skipBit = dstDatas[0].Stride - dstDatas[0].Width; byte * srcPtr = (byte *)srcData.Scan0; byte *[] dstPtrs = new byte *[8]; for (int i = 0; i < 8; i++) { dstPtrs[i] = (byte *)dstDatas[i].Scan0; } for (int j = 0; j < srcData.Height; j++) { for (int i = 0; i < srcData.Width; i++) { for (int k = 7; k >= 0; k--) { //Debug.Print(" " + i + " " + j + " " + k); byte srcByte = srcPtr[0]; switch (method) { case CodingMethod.GrayCode: srcByte = bin2Gray(srcByte); break; case CodingMethod.Binary: default: break; } if ((BitMask[k] & srcByte) != 0) { byte *target = dstPtrs[k]; target[0] = 255; target[1] = 255; target[2] = 255; } dstPtrs[k] += 3; } srcPtr += 3; } srcPtr += skipByte; for (int k = 7; k >= 0; k--) { dstPtrs[k] += skipByte; } } } src.UnlockBits(srcData); for (int i = 0; i < 8; i++) { planes[i].UnlockBits(dstDatas[i]); } return(planes); }