Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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());
        }
Beispiel #4
0
 public void froms(Bitmap src, CodingMethod method)
 {
     bitPlanes = getBitPlane(src, method);
 }
Beispiel #5
0
        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);
        }