コード例 #1
0
        /**
         *  CopyImageData
         *  Image copy directly from memory, to encoded UINT64
         */
        internal unsafe void CopyImageData(Bitmap img)
        {
            // byte array to store image data
            byte[] rawData = new byte[img.Width * Bytes_per_pixel * img.Height];
            // locking image (fast access)
            BitmapData lockModeImage = img.LockBits(new Rectangle(0, 0, Width, Height),
                                                    ImageLockMode.ReadOnly,
                                                    PixelFormat.Format32bppArgb);
            // Byte Pointer (unsafe) then Marshal.Copy
            IntPtr ptr = lockModeImage.Scan0;

            Marshal.Copy(ptr, rawData, 0, rawData.Length);
            int pixPtr = 0; // pixel pointer

            // For all pixel in Image byte data
            for (int p = 0; p < rawData.Length; p += Bytes_per_pixel)
            {
                // encode it
                Pixels[pixPtr++] = PixelHandler.Encode(rawData[p++],  // A
                                                       rawData[p++],  // R
                                                       rawData[p++],  // G
                                                       rawData[p++]); // B
            }
            // and lastly unlock image
            img.UnlockBits(lockModeImage);
        }
コード例 #2
0
        private void buttonConvert_Click(object sender, EventArgs e)
        {
            // get color from text fields
            Color ArgbColor = Color.FromArgb(int.Parse(textArgb_A.Text),
                                             int.Parse(textArgb_R.Text),
                                             int.Parse(textArgb_G.Text),
                                             int.Parse(textArgb_B.Text));
            //Color ArgbColor = Color.FromKnownColor(KnownColor.Blue);
            // convert
            UInt64 colorToConvert = PixelHandler.ArgbToAhsv(ArgbColor);

            float[] converted = new float[4];
            converted = PixelHandler.Decode(colorToConvert);
            decimal hue = (decimal)converted[1]; // keeping real value

            // show converted data
            textAhsv_A.Text = converted[PixelHandler.COLOR_A].ToString();

            textAhsv_H.Text = (converted[PixelHandler.COLOR_H]).ToString() + "°";

            textAhsv_S.Text = converted[PixelHandler.COLOR_S].ToString()
                              + "   (" + (converted[PixelHandler.COLOR_S] / 255 * 100).ToString() + "% )";

            textAhsv_V.Text = converted[PixelHandler.COLOR_V].ToString()
                              + "   (" + (converted[PixelHandler.COLOR_V] / 255 * 100).ToString() + "% )";
        }
コード例 #3
0
        public string ImageSample(int layer, int x1, int y1, int x2, int y2)
        {
            // shift pattern to apply
            // see: PixelHandler.Color_A , PixelHandler.Color_S etc.
            int    compositeLayer = (layer != 0) ? PixelHandler.COLOR_V : layer;
            float  v;
            string output = "";

            // region
            for (int y = y1; y < y2; y++)
            {
                for (int x = x1; x < x2; x++)
                {
                    // convert to value from layered pattern
                    v       = PixelHandler.GetValueFromUint64(GetPixel(x, y), layer);
                    output += "; " + v;
                }
                output += "\n";
            }

            return(output);
        }