Red de conocimiento informático - Conocimiento informático - ¡Buscamos un experto! ¡Quiero hacer una forma en forma de corazón usando C#!

¡Buscamos un experto! ¡Quiero hacer una forma en forma de corazón usando C#!

1. Formularios personalizados, normalmente gráficos regulares, como círculos, elipses, etc.

Método: Reescribe el evento Form1_Paint (Form1 es el nombre del formulario. El caso más simple es el siguiente:

System.Drawing.Drawing2D.GraphicsPath forma = new System.Drawing). .Drawing2D.GraphicsPath();

forma.AddEllipse(0, 0, esta.Altura, este.Ancho);

esta.Región = nueva Región(forma);

p>

Es decir, las reglas para volver a dibujar el formulario.

2. Implementación usando imágenes de fondo

1.? Establezca la imagen de fondo del formulario, donde la imagen de fondo es un mapa de bits (imagen BMP) de menos de 24 bits (excluyendo 24). Y establezca el valor de TansparencyKey, que suele ser el color de fondo de su imagen de fondo, es decir, el color de fondo al crear una imagen irregular generalmente se establece en un color que no está en su imagen.

La desventaja de este enfoque es que la imagen de fondo debe ser de 16 bits o menos y debe mostrarse en el cliente. Si la configuración de profundidad de color del monitor es superior a 24 bits, las partes no transparentes del formulario causarán problemas de visualización independientemente de cómo esté configurada la propiedad TransparencyKey. Para evitar este problema, asegúrese de que la profundidad de color del monitor en el panel de control de Pantalla esté configurada en menos de 24 bits. Al desarrollar aplicaciones con tales capacidades de transparencia, tenga en cuenta que debe informar a sus usuarios sobre este problema.

Los pasos de implementación son los siguientes:

1. ?Cree una nueva aplicación de Windows

2. ?Seleccione el formulario, busque la propiedad BackgroundImage, haga clic para abrir una nueva ventana, seleccione el archivo de recursos de importación a continuación y seleccione su imagen BMP irregular

3. ?Busque la TansparencyKey del formulario y configúrela en el color de fondo de su imagen de fondo (como amarillo)

4. ?Busque el FormBorderStyle del formulario y configúrelo en ninguno, es decir, no muestre la barra de título

5. ?Ejecutar

lt;!--[endif]--gt;

2.? Los mismos gráficos que la imagen de fondo, pero cargados dinámicamente, atravesando el mapa de bits para lograr una forma irregular. . El principio es este: escriba un método en el evento de carga del formulario para cambiar el área de dibujo del formulario.

Los pasos de implementación son los siguientes:

1. ?Crear aplicación winform

2. ?Busque el evento Load del formulario y haga doble clic para editar

3. ?Método de escritura, el código principal es el siguiente:

Código

clase?BitmapRegion

{

public?BitmapRegion()

{?}

///?lt;summarygt;?

///?Crear?y?aplicar?la?región?en?la? control suministrado

///?Crear un control que admita áreas de mapa de bits (actualmente botones y formularios)

///?lt;/summarygt;?

///?lt;param?name="control"gt;El?objeto?Control?a?aplicar?la?región?acontrollt;/paramgt;?

///?lt; ?name="bitmap"gt;El?objeto?Bitmap?para?crear?la?región?desdeBitmaplt;/paramgt;?

public?static?void?CreateControlRegion(Control?control ,?Bitmap? bitmap)

{

//?Return?if?control?and?bitmap?are?null

//Determinar si el control existe y bitmap

if?(control?==?null?||?bitmap?==?null)

return;

//?Establecer ?nuestro?control ''s?size?to?be?the?same?as?the?bitmap

//Establece el tamaño del control al tamaño del mapa de bits

control.Width =?bitmap? .Width;

control.Height?=?bitmap.Height;

//?Compruebe?si?estamos?tratando?con?Form?aquí?

//Cuando el control es un formulario

if?(control?is?System.Windows.Forms.Form)

{

// ?Transmitir?a?un?objeto?Form?

//Forzar formar

Form?form?=?(Form)control;

///? Establezca?el?tamaño?de?nuestro?formulario?para que?sea?un?poco?más grande?que?el?mapa de bits?sólo?

//?en?caso?el?formulario? ¿el?estilo?del?borde?no?establecido?en?ninguno?en?el?primer?lugar?

//Cuando el borde del FORMULARIO, FormBorderStyle no es NINGUNO, el tamaño del FORMULARIO debe establecerse Ligeramente más grande que el tamaño del mapa de bits

form.Width?=?control.Width;

form.Height?=?control.Height;

/ /?No? ¿frontera?

//

Sin borde

form.FormBorderStyle?=?FormBorderStyle.None;

//?Establecer?bitmap?como?la?imagen de fondo?

// Establecer el mapa de bits como imagen de fondo del formulario

form.BackgroundImage?=?bitmap;

//?Calcular?la?ruta?gráfica?basada?en?el?mapa de bits? ?

//Calcular los límites de las partes opacas del mapa de bits

GraphicsPath?graphicsPath?=?CalculateControlGraphicsPath(bitmap);

//?Apply? new ?region?

//Aplicar nueva región

form.Region?=?new?Region(graphicsPath);

}

//?Comprobar?¿si?estamos?tratando?con?¿Botón?aquí?

//Cuando el control es un botón

¿else?if?(¿el control?es ? System.Windows.Forms.Button)

{

//?Cast?to?a?button?object?

//Cast?to? botón

¿Botón?botón?=?(Botón)control;

//?Do?not?show?button?text?

//No botón de visualización ?text

botón.Text?=?"";

//?¿Cambiar?cursor?a?mano?cuando?sobre?botón?

/ /Cambiar el estilo del ?cursor

botón.Cursor?=?Cursors.Hand;

//?Set?background?image?of?button?

//Establecer la imagen de fondo del botón

button.BackgroundImage?=?bitmap;

//?Calcular?la?ruta?gráfica?basada?en?el ?bitmap?supplied?

//Calcular el límite de la parte opaca del mapa de bits

GraphicsPath?graphicsPath?=?CalculateControlGraphicsPath(bitmap);

/ /?Aplicar?nueva?región ?

//Aplicar nueva región

botón.Región?=?nueva?Región(graphicsPath);

}

}

///?lt;summarygt;?

///?Calcular?la?trayectoria?gráfica?que?representa?la?figura?en ?el?mapa de bits?

///?excluyendo?el?color?transparente?¿cuál?es?el?píxel?superior?izquierdo?

///?// No incluido en el mapa de bits de cálculo.

El borde de la parte transparente

///?lt;/summarygt;?

///?lt;param?name="bitmap"gt;El?Bitmap?objeto ?para ?calcular?nuestra?ruta?gráfica?de?lt;/paramgt;?

///?lt;returnsgt;¿Ruta?gráfica?calculada?/returnsgt;?

privada ?static ?GraphicsPath?CalculateControlGraphicsPath(Bitmap?bitmap)

{

//?Create?GraphicsPath?for?our?bitmap?cálculo?

// ¿Crear? GraphicsPath

GraphicsPath?graphicsPath?=?new?GraphicsPath();

//?¿Usar?el?píxel?superior?izquierdo?como?nuestro?color?transparente?

//Utiliza el color de la esquina superior izquierda como nuestro color transparente

Color?colorTransparent?=?bitmap.GetPixel(0,?0);

// ?Esto?es?para?almacenar?el?valor?de?columna?dónde?un?píxel?opaco?se?encuentra?primero.?

//?Este?valor?determinará? ?¿dónde?empezamos?escaneo?en busca?de?píxeles?opacos?

//X del primer punto encontrado

int?colOpaquePixel?=?0;

//?¿Pasar?por?todas?las?filas?(¿eje Y?)?

//?Pasar por todas las filas (dirección Y)

para?(int ?fila ?=?0;?fila?lt;?bitmap.Height;?fila )

{

//?Restablecer?valor?

/ /Restablecer conjunto

colOpaquePixel?=?0;

//?¿Ir?a través de?todas?columnas?(¿Eje X?)?

//Todos calendarios parciales Columna (dirección X)

for?(int?col?=?0;?col?lt;?bitmap.Width;?col)

{

//?Si?este?es?un?píxel?opaco,?márquelo?y?busque?¿alguno más?que esté detrás?

//Si es un punto que no requiere procesamiento de transparencia Luego marque y luego continúe con el calendario parcial

if?(bitmap.GetPixel(col,?row)?=?colorTransparent)

{

//?Opaque?pixel?found,?mark?current?position

//Registrar actual

colOpaquePixel?=?col;

/ /?Crear?otra?variable?para?establecer?la?moneda?

t?pixel?position?

//Crea una nueva variable para registrar el punto actual

int?colNext?=?col;

//?Iniciando ?desde el píxel?opaco?encontrado?actual,?busque?más?píxeles?opacos?

//?arrastre?detrás,?hasta?que?encuentre?un?píxel?transparente?o?mínimo ?ancho ?se?alcanzado?

///Empiece desde el punto opaco encontrado y continúe buscando puntos opacos hasta encontrar o alcanzar el ancho de la imagen?

for?(colNext ?=? colOpaquePixel;?colNext?lt;?bitmap.Width;?colNext )

if?(bitmap.GetPixel(colNext,?row)?==?colorTransparent)

romper;

//?¿Formar?un?rectángulo?para?la?línea?de?píxeles?opacos?encontrados?y?agregarlo?a?nuestra?ruta?gráfica?

/ /será opaco ¿Agregar puntos a los gráficos?path

graphicsPath.AddRectangle(new?Rectangle(colOpaquePixel,?row,?colNext?-?colOpaquePixel,?1));

/ /?¿No? ¿Necesitas?escanear?la?línea?de?píxeles?opacos?que?recién?encontrados?

col?=?colNext;

}

}

}

//?¿Retorno?¿calculado?¿ruta?gráfica?

retorno?ruta?gráfica;

}

}

4. ?Ejecutar lt;!--[endif]--gt;