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); } }
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); } }