private void openFileDialog1_FileOk(object sender, CancelEventArgs e) { System.IO.Stream myStream = null; try { if ((myStream = openFileDialog1.OpenFile()) != null) { using (myStream) { //myWindow.background = new Bitmap(myStream); //bitmapka tego okienka z pliku BitmapObject new_bo = new BitmapObject(); new_bo.bitmap = new Bitmap(myStream); new_bo.name = "Stan " + m_parent.PanelWindows[m_WObject].bitmaps[m_OBitmap].bitmap.Count.ToString(); new_bo.state = m_parent.PanelWindows[m_WObject].bitmaps[m_OBitmap].bitmap.Count; m_parent.PanelWindows[m_WObject].bitmaps[m_OBitmap].bitmap.Add(new_bo); } //using } //if } //try catch (Exception ex) { MessageBox.Show("Błąd: Nie mogę przeczytać pliku ! Oryginał: " + ex.Message); }//catch finally { ImageList imageListSmall = new ImageList(); listView1.Clear(); listView1.SmallImageList = null; foreach (BitmapObject bo in m_parent.PanelWindows[m_WObject].bitmaps[m_OBitmap].bitmap) { ListViewItem item = listView1.Items.Add(bo.name); imageListSmall.Images.Add(bo.bitmap); item.ImageIndex = bo.state; item.Tag = bo; //listView1.Items.Add(bo.name); } //foreach listView1.SmallImageList = imageListSmall; } //finally }
private void toolStripButton3_Click(object sender, EventArgs e) //kopiujemy bitmapkę tworząc nowy "stan" { BitmapObject selected_bo = m_parent.PanelWindows[m_WObject].bitmaps[m_OBitmap].bitmap[listView1.Items.IndexOf(listView1.SelectedItems[0])]; //Okienko zawierające wybrany obiekt BitmapObject new_bo = BitmapObject.Copy(selected_bo); new_bo.name = selected_bo.name + " kopia"; new_bo.state = selected_bo.state + 1; m_parent.PanelWindows[m_WObject].bitmaps[m_OBitmap].bitmap.Add(new_bo); ImageList imageListSmall = new ImageList(); listView1.Clear(); foreach (BitmapObject bo in m_parent.PanelWindows[m_WObject].bitmaps[m_OBitmap].bitmap) { ListViewItem item = listView1.Items.Add(bo.name); imageListSmall.Images.Add(bo.bitmap); item.ImageIndex = bo.state; item.Tag = bo; //listView1.Items.Add(bo.name); }//foreach listView1.SmallImageList = imageListSmall; }
private void oFDObjectBitmap_FileOk(object sender, CancelEventArgs e) { System.IO.Stream myStream = null; try { if ((myStream = oFDObjectBitmap.OpenFile()) != null) { using (myStream) { //myWindow.background = new Bitmap(myStream); //bitmapka tego okienka z pliku WindowObject wo = new WindowObject(); //tworzymy nowy obiekt wo.x = 0; wo.y = 0; wo.bitmap = new List <BitmapObject>(); BitmapObject bo = new BitmapObject(); bo.bitmap = new Bitmap(myStream); wo.size_x = bo.bitmap.Width; wo.size_y = bo.bitmap.Height; bo.state = 0; bo.name = "Stan" + bo.state.ToString(); //dodajemy bitmapkę z odpowiednią nazwą wo.bitmap.Add(bo); int temp = PanelWindows.FindIndex( delegate(Window w) { return(w.name == treeView1.SelectedNode.Text); } //delegate ); //to wyszukuje na liście element o nazwie jak wybrana w treeview if (PanelWindows[temp].bitmaps == null) { wo.name = PanelWindows[temp].name + "_0"; } else { wo.name = PanelWindows[temp].name + "_" + PanelWindows[temp].bitmaps.Count.ToString(); } PanelWindows[temp].bitmaps.Add(wo); } //using } //if } //try catch (Exception ex) { MessageBox.Show("Błąd: Nie mogę przeczytać pliku ! Oryginał: " + ex.Message); } //catch finally { //Poniższe odświeża widok rzewka i w zamierzeniu miało pozostawiac zaznaczone to co ostatnio. Nie działe niestety. String temp_node = treeView1.SelectedNode.Text; treeView1.Nodes.Clear(); foreach (Window i in PanelWindows) { WindowObject[] two = i.bitmaps.ToArray(); List <TreeNode> tn = new List <TreeNode>(); foreach (WindowObject ttw in two) { TreeNode ttn = new TreeNode(ttw.name); tn.Add(ttn); } //foreach TreeNode[] array = tn.ToArray(); TreeNode tttn = new TreeNode(i.name, array); treeView1.Nodes.Add(tttn); } //foreach treeView1.SelectedNode = treeView1.Nodes[temp_node]; /* * int temp = PanelWindows.FindIndex( * delegate(Window w) * { * return w.name == treeView1.SelectedNode.Text; * }//delegate * ); //to wyszukuje na liście element o nazwie jak wybrana w treeview */ WindowObject[] two1 = PanelWindows[0].bitmaps.ToArray(); foreach (WindowObject ttw in two1) { Bitmap bmp = new Bitmap(ttw.bitmap[0].bitmap); Point p = new Point(ttw.x, ttw.y); Graphics g = pBPanel.CreateGraphics(); g.DrawImage(bmp, p); } //foreach myStream.Close(); } //finally }
private void pBPanel_MouseUp(object sender, MouseEventArgs e) { if (bHaveMouse && bEnableCut) { WindowObject wo = new WindowObject(); //tworzymy nowy obiekt z zaznaczonego kawałka wo.x = ptOriginal.X - pBPanel.Location.X; //liczymy relatywne położenie ponieważ współrz. myszki mamy względem ekranu a w bitmapce mamy wsp. lokalne wo.y = ptOriginal.Y - pBPanel.Location.Y; if (ptLast.X > ptOriginal.X) { wo.size_x = ptLast.X - ptOriginal.X; } else { wo.size_x = ptOriginal.X - ptLast.X; } if (ptLast.Y > ptOriginal.Y) { wo.size_y = ptLast.Y - ptOriginal.Y; } else { wo.size_y = ptOriginal.Y - ptLast.Y; } int temp = PanelWindows.FindIndex( delegate(Window w) { return(w.name == treeView1.SelectedNode.Text); } //delegate ); //to wyszukuje na liście element o nazwie jak wybrana w treeview //Teraz trzeba policzyć rozmiar okienka do wycięcia. Współrzędne z myszki są w rozdzielczości rozciągniętej bitmapki a chccemy wydobyć odpowiadający fragment tej bitmapki float factor = (float)PanelWindows[temp].background.Width / (float)pBPanel.Width; wo.size_x = (int)((float)wo.size_x * factor); wo.x = (int)((float)wo.x * factor); factor = (float)PanelWindows[temp].background.Height / (float)pBPanel.Height; wo.size_y = (int)((float)wo.size_y * factor); wo.y = (int)((float)wo.y * factor); //wycinamy za pomoca prostokącika Rectangle rect = new Rectangle(wo.x, wo.y, wo.size_x, wo.size_y); //Bitmap tb = (Bitmap)pBPanel.Image.Clone(); Bitmap tb = (Bitmap)pBPanel.BackgroundImage.Clone(); Bitmap tb2 = (Bitmap)tb.Clone(rect, tb.PixelFormat); wo.bitmap = new List <BitmapObject>(); BitmapObject bo = new BitmapObject(); bo.bitmap = (Bitmap)tb2.Clone(); bo.state = 0; bo.name = "Stan" + bo.state.ToString(); //dodajemy bitmapkę z odpowiednią nazwą wo.bitmap.Add(bo); if (PanelWindows[temp].bitmaps == null) { wo.name = PanelWindows[temp].name + "_0"; } else { wo.name = PanelWindows[temp].name + "_" + PanelWindows[temp].bitmaps.Count.ToString(); } PanelWindows[temp].bitmaps.Add(wo); //a teraz wyczyscimy wyciety fragment tla Bitmap bmp = new Bitmap(pBPanel.BackgroundImage.Width, pBPanel.BackgroundImage.Height); //tworzymy nowa bitmapke o odpowiednich rozmiarach. Nie mozna od razu zrobic bitmapy jako referencji do tla bo bedzie wyjatek Graphics rem_frame_g = Graphics.FromImage(bmp); //teraz grafika po ktorej bedziemy mazac rem_frame_g.DrawImage(pBPanel.BackgroundImage, new Point(0, 0)); //uzupelniamy bitmapke o wlasciwy obrazek SolidBrush rem_frame_sb = new SolidBrush(pBPanel.BackColor); rem_frame_g.FillRectangle(rem_frame_sb, rect); //rysujemy prostokacik w kolorze tla pBPanel.BackgroundImage = bmp; //i calosc dopiero umieszczamy na ekranie ActiveWindow.background = bmp; //Na koniec trzeba przerysować wszystkie ikonki bo mazanie po tle usuwa je. Zrobimy to przy okazji odswiezania drzewka //Poniższe odświeża widok drzewka String temp_node = treeView1.SelectedNode.Text; LastSelectedTreeNode = null; treeView1.Nodes.Clear(); foreach (Window i in PanelWindows) { WindowObject[] two = i.bitmaps.ToArray(); List <TreeNode> tn = new List <TreeNode>(); foreach (WindowObject ttw in two) { TreeNode ttn = new TreeNode(ttw.name); tn.Add(ttn); if (ttn.Text == temp_node) { LastSelectedTreeNode = ttn; } }//foreach TreeNode[] array = tn.ToArray(); TreeNode tttn = new TreeNode(i.name, array); treeView1.Nodes.Add(tttn); if ((LastSelectedTreeNode == null) && (tttn.Text == temp_node)) { LastSelectedTreeNode = tttn; } }//foreach //nabazgralismy tlo to teraz ikonki WindowObject[] two2 = ActiveWindow.bitmaps.ToArray(); foreach (WindowObject ttw in two2) { Bitmap moved_bmp = new Bitmap(ttw.bitmap[0].bitmap); Point moved_p = new Point(ttw.x, ttw.y); Graphics moved_g = pBPanel.CreateGraphics(); moved_g.DrawImage(moved_bmp, moved_p); } //foreach pBPanel.Refresh(); } //if if (LastSelectedTreeNode.Parent != null) { treeView1.SelectedNode = LastSelectedTreeNode.Parent; } else { treeView1.SelectedNode = LastSelectedTreeNode; } // Set internal flag to know we no longer "have the mouse". bHaveMouse = false; // If we have drawn previously, draw again in that spot // to remove the lines. if (ptLast.X != -1) { Point ptCurrent = new Point(e.X + pBPanel.Location.X, e.Y + pBPanel.Location.Y); MyDrawReversibleRectangle(ptOriginal, ptLast); } // Set flags to know that there is no "previous" line to reverse. ptLast.X = -1; ptLast.Y = -1; ptOriginal.X = -1; ptOriginal.Y = -1; bEnableCut = false; }
public static BitmapObject Copy(BitmapObject bo) { return((BitmapObject)bo.MemberwiseClone()); }//Copy