Ejemplo n.º 1
0
        private void Trocear_Imagen_Placa(int x, int y, string Texto)
        {
            Bitmap bmpAux = new Bitmap(Constantes.AnchoPlacaPx, Constantes.AltoPlacaPx, bmpGenerado.PixelFormat);
            Byte[] PixelesAux = null;
            int profundidadAux=0, stepAux=0;
            IntPtr punteroImagenAux = IntPtr.Zero;
            BitmapData bmpDataAux = null;

            try
            {                
                try
                {
                    Graphics.FromImage(bmpAux).DrawImage(bmpGenerado, new Rectangle(0, 0, Constantes.AnchoPlacaPx, Constantes.AltoPlacaPx),
                        new Rectangle(x, y, Constantes.AnchoPlacaPx, Constantes.AltoPlacaPx), GraphicsUnit.Pixel);
                    bmpTroceada = new Bitmap(bmpAux.Width * Constantes.AnchoHamaGen, bmpAux.Height * Constantes.AltoHamaGen, bmpAux.PixelFormat);
                }
                catch (System.Exception ex)
                {
                    throw new cExcepcionControlada("Error al crear la imagen generada. Se ha excedido el tamaño maximo. (Tamaño Actual: "
                        + (bmpGenerado.Width * Constantes.AnchoHamaGen).ToString() + "x"
                        + (bmpGenerado.Height * Constantes.AltoHamaGen).ToString() + ").", ex);
                }

                PixelesAux = LockBits(ref bmpAux, ref profundidadAux, ref stepAux, ref punteroImagenAux, ref bmpDataAux);
                PixelesTroceada = LockBits(ref bmpTroceada, ref profundidadTroceada, ref stepTroceada, ref punteroImagenTroceada, ref bmpDataTroceada);

                Ocultar_Mensaje_Estado();
                
                List<ColorHama> coloresSeleccionados = listaColores.Where(i => i.Habilitado).ToList();
                ProfundidadBase procesador = null;

                switch (bmpAux.PixelFormat)
                {
                    case PixelFormat.Format24bppRgb:
                        procesador = new Profundidad24(bmpAux, PixelesAux, PixelesTroceada, bmpDataAux, bmpDataTroceada, stepAux, stepTroceada);
                        break;
                    case PixelFormat.Format32bppArgb:
                        procesador = new Profundidad32(bmpAux, PixelesAux, PixelesTroceada, bmpDataAux, bmpDataTroceada, stepAux, stepTroceada);
                        break;
                }

                this.Cursor = Cursors.WaitCursor;

                procesador.ProcesarImagen(coloresSeleccionados, true);

                this.Cursor = Cursors.Default;
                
                UnlockBits(PixelesAux, ref punteroImagenAux, ref bmpAux, ref bmpDataAux);
                UnlockBits(PixelesTroceada, ref punteroImagenTroceada, ref bmpTroceada, ref bmpDataTroceada);

                bmpTroceada.Save(rutaGuardadoTroceada + Texto + "." + extensionGuardado);               

                bmpTroceada.Dispose();
                bmpTroceada = null;
                bmpAux.Dispose();
                bmpAux = null;

                punteroImagenAux = IntPtr.Zero;
                PixelesAux = null;
                bmpDataAux = null;
            }
            catch (System.Exception ex)
            {
                MessageBox.Show(ex.Message + System.Environment.NewLine + "Mas Info: "
                    + System.Environment.NewLine + System.Environment.NewLine
                    + (ex.InnerException != null ? ex.InnerException.Message : ""),
                    "ERROR GENERANDO IMAGEN", MessageBoxButtons.OK, MessageBoxIcon.Error);

                if (ex is cExcepcionControlada)
                    UnlockBits(PixelesAux, ref punteroImagenAux, ref bmpAux, ref bmpDataAux);
            }            
        }        
Ejemplo n.º 2
0
        private void Procesar_Imagen()
        {
            try
            {                
                try
                {
                    bmpGenerado = new Bitmap(bmpOriginal.Width, bmpOriginal.Height, bmpOriginal.PixelFormat);
                }
                catch (System.Exception ex)
                {
                    throw new cExcepcionControlada("Error al crear la imagen generada. Se ha excedido el tamaño maximo. (Tamaño Actual: "
                        + (bmpOriginal.Width * Constantes.AnchoHamaGen).ToString() + "x"
                        + (bmpOriginal.Height * Constantes.AltoHamaGen).ToString() + ").", ex);
                }

                Pixeles = LockBits(ref bmpOriginal, ref profundidad, ref step, ref punteroImagen, ref bmpData);
                PixelesGen = LockBits(ref bmpGenerado, ref profundidadGen, ref stepGen, ref punteroImagenGen, ref bmpDataGen);

                Ocultar_Mensaje_Estado();

                barraProgreso.Step = 1;
                barraProgreso.Value = 0;
                barraProgreso.Maximum = bmpOriginal.Height;

                ResetearContadoresHama();

                List<ColorHama> coloresSeleccionados = listaColores.Where(x => x.Habilitado).ToList();
                ProfundidadBase procesador = null;

                switch (bmpOriginal.PixelFormat)
                {
                    case PixelFormat.Format24bppRgb:
                        procesador = new Profundidad24(bmpOriginal, Pixeles, PixelesGen, bmpData, bmpDataGen, step, stepGen);
                        break;
                    case PixelFormat.Format32bppArgb:
                        procesador = new Profundidad32(bmpOriginal, Pixeles, PixelesGen, bmpData, bmpDataGen, step, stepGen);
                        break;
                }

                procesador.barraProgreso = this.barraProgreso;                
                procesador.StepDoneEvent += new ProfundidadBase.StepDoneHandler(procesador_StepDone);

                this.Cursor = Cursors.WaitCursor;

                procesador.ProcesarImagen(coloresSeleccionados, false);

                this.Cursor = Cursors.Default;

                //if (BitConverter.IsLittleEndian)
                //{
                //    //Array.Reverse(Pixeles);
                //    //Array.Reverse(PixelesGen);
                //}

                UnlockBits(Pixeles, ref punteroImagen, ref bmpOriginal, ref bmpData);
                UnlockBits(PixelesGen, ref punteroImagenGen, ref bmpGenerado, ref bmpDataGen);

                pbZoomGenerada.SizeMode = PictureBoxSizeMode.Zoom;
                pbZoomGenerada.Imagen = bmpGenerado;

                ActualizarEtiquetasConNumeroDePiezasHama();
                ActualizarEstadisticas();

                Habilitar_Botones_Tras_Generar_Imagen();

                Mostrar_Mensaje_Estado("Imagen Generada Correctamente.");
            }
            catch (System.Exception ex)
            {
                MessageBox.Show(ex.Message + System.Environment.NewLine + "Mas Info: "
                    + System.Environment.NewLine + System.Environment.NewLine
                    + (ex.InnerException != null ? ex.InnerException.Message : ""),
                    "ERROR GENERANDO IMAGEN", MessageBoxButtons.OK, MessageBoxIcon.Error);

                if (ex is cExcepcionControlada)
                    UnlockBits(Pixeles, ref punteroImagen, ref bmpOriginal, ref bmpData);
            }
        }