/** * 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); }
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() + "% )"; }
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); }