public void SaveToStream(Stream stream, PictureImage image) { var bmp = new Bitmap(image.Width, image.Height, PixelFormat.Format24bppRgb); var bmpData = bmp.LockBits(new Rectangle(Point.Empty, bmp.Size), ImageLockMode.WriteOnly, PixelFormat.Format24bppRgb); Marshal.Copy(image.Data, 0, bmpData.Scan0, image.Data.Length); bmp.UnlockBits(bmpData); bmp.Save(stream, ImageFormat.Png); }
static void Main(string[] args) { var sourcePath = args[0]; var image = new PictureImage(); var reader = new GenericReader(); image.LoadFromFile(sourcePath, reader); var writer = new PngWriter(); image.SaveToFile(Service.ConvertToTargetPath(sourcePath), writer); }
public void LoadFromStream(Stream stream, PictureImage image) { var i = Image.FromStream(stream); var bmp = new Bitmap(i); var bmpData = bmp.LockBits(new Rectangle(Point.Empty, i.Size), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb); image.Width = i.Width; image.Height = i.Height; image.Stride = bmpData.Stride; image.Data = new byte[bmpData.Stride * bmpData.Height]; Marshal.Copy(bmpData.Scan0, image.Data, 0, image.Data.Length); bmp.UnlockBits(bmpData); }
/// <summary> /// Метод создания и выравнивания необходимых элементов для загруженной или созданной нейросети. /// </summary> void SetNN() { // Изменения в интерфейсе: LabelStatus.Visible = false; LabelImage.Visible = true; PictureImage.Width = IRNN1.PictureDimension + 2; // + 2 для метода GetPixel (он неправильно работает на границе холста). PictureImage.Height = PictureImage.Width; PictureImage.Visible = true; PictureNeuronet.Left = PictureImage.Right + 14; PictureNeuronet.Top = PictureImage.Top; PictureNeuronet.Width = 270; PictureNeuronet.Height = PictureNeuronet.Width; LabelNeuronet.Left = PictureNeuronet.Left - 3; LabelNeuronet.Visible = true; PictureNeuronet.Visible = true; Width = PictureNeuronet.Right + 24; Height = Math.Max(PictureImage.Bottom, PictureNeuronet.Bottom) + 50 + ToolStripImgRcg.Height; // Открытие доступа к панели инструментов: LabelImage.Visible = true; PictureImage.Visible = true; LabelNeuronet.Visible = true; PictureNeuronet.Visible = true; ToolSave.Enabled = true; ToolClose.Enabled = true; ToolRefresh.Enabled = true; ToolName.Enabled = true; ToolImage.Enabled = true; ToolImage.Text = ""; ToolAddImage.Enabled = true; ToolDeleteImage.Enabled = true; ToolImgRcg.Enabled = true; LabelStatus.Visible = false; // Создание графических объектов: StylusType = 0; // Обычная кисть. Stylus = new Pen(Color.FromArgb(128, 255, 128), 9.0f); // Создание пера с заданным цветом и размером. BgrpImage = BufferedGraphicsManager.Current.Allocate(PictureImage.CreateGraphics(), new Rectangle(0, 0, PictureImage.Width, PictureImage.Height)); // Создаем для этого графический буфер. BgrpNeuronet = BufferedGraphicsManager.Current.Allocate(PictureNeuronet.CreateGraphics(), new Rectangle(0, 0, PictureNeuronet.Width, PictureNeuronet.Height)); // Аналогично для рисования состояния нейросети. }