BigLitho/Large.Lito.Database/Make3_Treko3D/ChildForms/AnglesControl.cs

374 lines
13 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Drawing.Imaging;
using System.Runtime.InteropServices;
using Projects;
namespace ChildForms
{
public partial class AnglesControl : UserControl
{
public Color[,] Pixels;
public Color[] Colors = new Color[1000];
public Color CurrCol;
//private TrekoControl trekoControl1;
string AnglePath;
int cycle = 0;
Treko.Treko _trekoObj;
Project _projectObj;
Graphics gPreview;
public Treko.Treko TrekoObj
{
get { return _trekoObj; }
set { _trekoObj = value; }
}
public Project ProjectObj
{
get { return _projectObj; }
set { _projectObj = value; }
}
public AnglesControl()
{
InitializeComponent();
}
private void btnOk_Click(object sender, EventArgs e)
{
this.FindForm().Visible = false;
}
private void btnCancel_Click(object sender, EventArgs e)
{
this.FindForm().Visible = false;
}
private bool FColor(Color col)
{
for (int i = 0; i < Colors.Length; i++)
{
if (Colors[i] == col)
return true;
}
return false;
}
private void sortColorBar(int n)
{
Color temp;
for (int i = 0; i <= n - 1; i++)
{
for (int j = i + 1; j <= n; j++)
{
if (Colors[i].R < Colors[j].R)
{
temp = Colors[i];
Colors[i] = Colors[j];
Colors[j] = temp;
}
}
}
for (int i = 0; i <= n - 1; i++)
{
for (int j = i + 1; j <= n; j++)
{
if (Colors[i].G < Colors[j].G)
{
temp = Colors[i];
Colors[i] = Colors[j];
Colors[j] = temp;
}
}
}
for (int i = 0; i <= n - 1; i++)
{
for (int j = i + 1; j <= n; j++)
{
if (Colors[i].B < Colors[j].B)
{
temp = Colors[i];
Colors[i] = Colors[j];
Colors[j] = temp;
}
}
}
}
private void DrawCurColor()
{
Color col;
ddPictureBox.Image = new Bitmap(AnglePath);
Bitmap bmp = new Bitmap(AnglePath);
//Bitmap bmp = new Bitmap(new Bitmap(AnglePath), 1000,600);
//ddPictureBox.Image = new Bitmap(bmp);
PixelFormat fmt = bmp.PixelFormat;
byte bpp = (byte)(fmt == PixelFormat.Format32bppArgb ? 4 : 3);
Graphics g = Graphics.FromImage(bmp);
//g.Clear(CurrCol);
// Lock the bitmap's bits.
Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);
System.Drawing.Imaging.BitmapData bmpData =
bmp.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite, bmp.PixelFormat);
// Get the address of the first line.
IntPtr ptr = bmpData.Scan0;
// Declare an array to hold the bytes of the bitmap.
int bytes = Math.Abs(bmpData.Stride) * bmp.Height;
byte[] rgbValues = new byte[bytes];
int size1 = bmpData.Stride * bmpData.Height;
byte[] data = new byte[size1];
// Copy the RGB values into the array.
System.Runtime.InteropServices.Marshal.Copy(ptr, rgbValues, 0, bytes);
for (int counter = 2; counter < rgbValues.Length - 1; counter += 3)
{
//rgbValues[counter] = 255;
col = Color.FromArgb(bpp == 4 ? data[counter + 3] : 255, rgbValues[counter - 0], rgbValues[counter - 1], rgbValues[counter - 2]);
if (col == CurrCol)
{
if (cycle == 0)
col = Color.White;
if (cycle == 1)
col = Color.Yellow;
if (cycle == 2)
col = Color.Magenta;
if (cycle == 3)
col = Color.MediumSeaGreen;
if (cycle == 4)
col = Color.Crimson;
if (cycle == 5)
col = Color.Salmon;
rgbValues[counter + 2] = col.B;
rgbValues[counter + 1] = col.G;
rgbValues[counter + 0] = col.R;
//rgbValues[counter + 2] = (byte)(cycle * 50);
//rgbValues[counter + 1] = (byte)(cycle * 50);
//rgbValues[counter + 0] = (byte)(cycle * 50);
}
}
// Copy the RGB values back to the bitmap
System.Runtime.InteropServices.Marshal.Copy(rgbValues, 0, ptr, bytes);
// Unlock the bits.
bmp.UnlockBits(bmpData);
// Draw the modified image.
g.DrawImage(bmp, 0, 0);
ddPictureBox.Image = new Bitmap(bmp);
ddPictureBox.Refresh();
}
private void BlueColBox1_MouseDown(object sender, MouseEventArgs e)
{
int X, Y;
Bitmap bmp = (Bitmap)BlueColBox1.Image;
if (e.Button == MouseButtons.Left)
{
X = e.X;
Y = e.Y;
if (e.X < 0) X = 0;
if (e.X >= BlueColBox1.Width) X = BlueColBox1.Width - 1;
if (e.Y < 20) Y = 20;
if (e.Y >= BlueColBox1.Height) Y = BlueColBox1.Height - 1;
CurrCol = bmp.GetPixel(X, Y);
DrawCurColor();
}
}
private void BlueColBox1_MouseMove(object sender, MouseEventArgs e)
{
int X, Y;
Bitmap bmp = (Bitmap)BlueColBox1.Image;
if (e.Button == MouseButtons.Left)
{
X = e.X;
Y = e.Y;
if (e.X < 0) X = 0;
if (e.X >= BlueColBox1.Width) X = BlueColBox1.Width - 1;
if (e.Y < 20) Y = 20;
if (e.Y >= BlueColBox1.Height) Y = BlueColBox1.Height - 1;
CurrCol = bmp.GetPixel(X, Y);
DrawCurColor();
}
}
private void BildBars(int n)
{
int width = 30;
int height = 50;
if (n < 1) n = 1;
BlueColBox1.Width = width * (n + 1);
BlueColBox1.Height = height;
BlueColBox1.Image = new Bitmap(width * (n + 1), height);
Bitmap bmp = (Bitmap)BlueColBox1.Image;
Graphics g = Graphics.FromImage(bmp);
//ddPanBox.Width = bmp.Width;
//ddPanBox.Height = bmp.Height;
Color col = Color.FromArgb(255, 10, 120, 230);
col = Colors[0];
Rectangle rect = new Rectangle();
Pen Pn = new Pen(col, 10);
//SolidBrush Br = new SolidBrush(Color.FromArgb(255,0,0,0);
Font drawFont1 = new Font("Arial", 9);
SolidBrush Br1 = new SolidBrush(Color.Black);
Font drawFont2 = new Font("Arial", 8);
SolidBrush Br2 = new SolidBrush(Color.White);
//Array.Sort(Colors,0,n);
for (int i = 0; i <= n; i++)
{
col = Colors[i];
Pn = new Pen(col, 15);
rect.X = i * width;
rect.Y = 0;
rect.Width = width - 16;
rect.Height = height;
g.DrawRectangle(Pn, rect);
g.DrawString(Convert.ToString(Colors[i].B), drawFont1, Br1, rect.X, rect.Y);
g.DrawString(Convert.ToString(Colors[i].B), drawFont2, Br2, rect.X, rect.Y);
//g.DrawEllipse(Pn, rect);
}
BlueColBox1.Refresh();
g.Dispose();
}
private void LoadPicture()
{
int n = 0, j;
Color col;
OpenFileDialog open_dialog = new OpenFileDialog(); //создание диалогового окна для выбора файла
open_dialog.Filter = "Image Files(*.BMP;*.JPG;*.GIF;*.PNG)|*.BMP;*.JPG;*.GIF;*.PNG|All files (*.*)|*.*"; //форматы загружаемых файлов
if (open_dialog.ShowDialog() == DialogResult.OK) //Кнопка "ОК"
{
AnglePath = open_dialog.FileName;
button1.Text = AnglePath;
try
{
for (int i = 0; i < Colors.Length; i++)
{
Colors[i] = Color.FromArgb(255, 0, 0, 0);
}
// Create a new bitmap.
ddPictureBox.Image = new Bitmap(AnglePath);
Bitmap bmp = new Bitmap(open_dialog.FileName);
PixelFormat fmt = bmp.PixelFormat;
byte bpp = (byte)(fmt == PixelFormat.Format32bppArgb ? 4 : 3);
Graphics g = Graphics.FromImage(bmp);
// Lock the bitmap's bits.
Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);
System.Drawing.Imaging.BitmapData bmpData =
bmp.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite, bmp.PixelFormat);
// Get the address of the first line.
IntPtr ptr = bmpData.Scan0;
// Declare an array to hold the bytes of the bitmap.
int bytes = Math.Abs(bmpData.Stride) * bmp.Height;
byte[] rgbValues = new byte[bytes];
int size1 = bmpData.Stride * bmpData.Height;
byte[] data = new byte[size1];
// Copy the RGB values into the array.
System.Runtime.InteropServices.Marshal.Copy(ptr, rgbValues, 0, bytes);
Colors[0] = Color.FromArgb(255, rgbValues[0], rgbValues[1], rgbValues[2]);
for (int counter = 2; counter < rgbValues.Length; counter += 3)
{
//rgbValues[counter] = 255;
col = Color.FromArgb(bpp == 4 ? data[counter + 3] : 255, rgbValues[counter], rgbValues[counter - 1], rgbValues[counter - 2]);
if (FColor(col) == false)
{
//if (col.R != 0 || col.G != 0 || col.B != 0)
//{
if (col.B < 255)
{
//n++;
Colors[n] = col;
n++;
}
//}
}
}
// Copy the RGB values back to the bitmap
System.Runtime.InteropServices.Marshal.Copy(rgbValues, 0, ptr, bytes);
// Unlock the bits.
bmp.UnlockBits(bmpData);
// Draw the modified image.
g.DrawImage(bmp, 0, 0);
}
catch (Exception d)
{
DialogResult rezult = MessageBox.Show(d.Message,
"Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
sortColorBar(n - 1);
BildBars(n - 1);
timer1.Enabled = true;
//if (ddPanBoxAnima.Image == null)
//{
// _trekoObj.CreateImageTreko();
// ddPanBoxAnima.Image = _trekoObj.ImgDisplayTreko;
//}
//else
//{
//Graphics g = Graphics.FromImage(ddPanBoxAnima.Image);
//ddPanBoxAnima.ClearImage(g);
//g.Dispose();
//}
//_trekoObj.DrawOnImage(_trekoObj.ImgDisplayTreko, _mmToPixelsCoeffPreview);
//_trekoObj.DrawOnImage(_trekoObj.ImgDisplayTreko, 10);
//ddPanBoxAnima.Refresh();
//if (ddPanBoxAnima.Image == null)
//{
// ddPanBoxAnima.Image = _trekoObj.ImgDisplayTreko;
// //ddPanBoxTreko3D.ClearImage();
//}
//gPreview = Graphics.FromImage(ddPanBoxAnima.Image);
//ddPanBoxAnima.ClearImage(gPreview);
//ddPanBoxAnima.Refresh();
//timer1.Interval = 100;
//timer1.Enabled = true;
}
}
private void button1_Click(object sender, EventArgs e)
{
LoadPicture();
}
private void timer1_Tick(object sender, EventArgs e)
{
if (cycle++ > 5) cycle = 0;
DrawCurColor();
}
}
}