Rendi trasparente la picturebox trasparente in C # .net

Ho due caselle immagine sovrapposte. Le immagini di entrambe le windows di immagine hanno alcuni pixel trasparenti. Voglio vedere la casella inferiore dell’immagine attraverso i pixel trasparenti della casella immagine sovrapposta.

Ho provato a impostare il colore di sfondo di entrambe le windows come trasparente. Ma basta impostare il colore posteriore della casella immagine sul colore di sfondo del modulo.

Chiaramente stai usando Winforms. Sì, la trasparenza viene simulata disegnando i pixel del genitore. Qual è il modulo, vedi solo i pixel del modulo, gli effetti di impilamento non funzionano. C’è un articolo della Knowledge Base che mostra una soluzione alternativa per questo. È doloroso. Un altro approccio è quello di non usare i controlli PictureBox ma semplicemente disegnare le immagini nell’evento Paint del modulo.

Considerare WPF, ha un modello di rendering molto diverso che supporta facilmente la trasparenza.

Le soluzioni a questo problema potrebbero essere varie e dipende principalmente dalle tue capacità e la quantità di lavoro dipenderà dal tipo di immagini che stai trattando. Ad esempio, se le immagini hanno sempre la stessa risoluzione, le dimensioni e l’immagine sovrapposta supportano la trasparenza, è ansible provare a manipolare due oggetti Image e disegnarne uno su un altro, quindi visualizzarlo in PictureBox . O se dovrai farlo più volte in vari punti della tua app, potresti anche pensare di creare il tuo UserContriol .

Codice in risposta a questa domanda , metodo ResizeImage in particolare, mostra come creare un’immagine ridimensionata, di buona qualità, tutto ciò che serve è cambiarlo un po ‘. Fallo per ottenere due Images come parametri di input e cambialo per disegnare un’immagine su un’altra.

I cambiamenti potrebbero assomigliare a questo

  public static Bitmap CombineAndResizeTwoImages(Image image1, Image image2, int width, int height) { //a holder for the result Bitmap result = new Bitmap(width, height); //use a graphics object to draw the resized image into the bitmap using (Graphics graphics = Graphics.FromImage(result)) { //set the resize quality modes to high quality graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality; graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; //draw the images into the target bitmap graphics.DrawImage(image1, 0, 0, result.Width, result.Height); graphics.DrawImage(image2, 0, 0, result.Width, result.Height); } //return the resulting bitmap return result; } 

E usalo, per esempio, in questo modo:

  pictureBox1.Image = CombineAndResizeTwoImages(Image.FromFile("c:\\a.png"), Image.FromFile("c:\\b.png"), 100,100); 

Ma questo è il suo unico esempio e devi adattarlo alle tue esigenze. In bocca al lupo.

Se è un PictureBox all’interno di un altro, puoi usare:

innerPictureBox.SendToBack(); innerPictureBox.Parent = outerPictureBox;