Sfondo Form con immagine e trasparenza

lunedì 17 ottobre 2005 - 17.13

D79 Profilo | Junior Member

Quello che vorrei fare è semplice: una form che invece di essere 'quadrata' ha per sfondo un'immagine dagli angoli smussati.
Ho letto che ci sono problemi di trasparenza per chi ha un color-depth>24 bit.
Ho cercato di risolvere la cosa in mille modi ma niente.

Possibile che non si possa fare?
Ho provato così:
FormBorederStyle=none
Backgroundimage= una png con sfondo trasparente

oppure:
FormBorederStyle=none
una picturebox con sfondo l'immagine con sfondo trasparente
da codice: me.TransparencyKey=BackColor

o tanti altri modi che non sto a dire.......

Brainkiller Profilo | Guru

Ciao,
allora vediamo un po', tu vorresti costruire una Form che abbia una dimensione diversa dal rettangolo classico è esatto ?

In questo caso è possibile ma non credo con le strade che hai tentato tu. Ci sono infatti delle API apposite che ti consentono di definire un'area della Form. Quindi puoi fare Form triangolari, circolari o anche forme irregolari.

Se è questo che ti interessa fammi sapere che ti cerco le API apposite perchè ora a memoria non le ricordo.

Ciao

David De Giacomi
Microsoft MVP
http://blogs.dotnethell.it/david/

D79 Profilo | Junior Member

no, vorrei proprio inserire un'immagine di sfondo.

----
il mio sito: http://it.geocities.com/chuck_dust/

palomo2 Profilo | Newbie

Creati l'area a partire da un immagine usando le region .... ecco una bella classe in VB:
http://www.thescarms.com/dotnet/IrregularForm.asp

Anche io mi sto interessando alle finestre irregolari e sono riuscito anche a crearne in c# con le region ma resta ancora il problema del resize e in giro nn sono riuscito a trovare nessun aiuto in merito .....se ci dovessi riuscire fammi sapere

agocam Profilo | Newbie

Ciao,
per creare una form non rettangolare devi creare una region ed associarla al tuo form.
Prova questo codice e fammi sapere ciao.
FileStream imageStream = File.OpenRead("nomefileimmagine");
Bitmap imageBackground = (Bitmap)Bitmap.FromStream(imageStream);
//prelevo il colore trasparente dal primo pixel della bitmap
Color transparentColor = imageBackground.GetPixel( 1,1 );
// Chiamo una funzione che converte i colori trasparenti della bitmap
this.Region = RegionConvert.ConvertBitmap(imageBackground, transparentColor);

La funzione che converte la bitmap è la seguente:

public unsafe static Region ConvertBitmap( Bitmap bitmap, Color transparencyKey)
{
GraphicsUnit unit = GraphicsUnit.Pixel;
RectangleF boundsF = bitmap.GetBounds( ref unit );
Rectangle bounds = new Rectangle( (int)boundsF.Left, (int)boundsF.Top,
(int)boundsF.Width, (int)boundsF.Height );

uint key = (uint)((transparencyKey.A << 24) | (transparencyKey.R << 16) |
(transparencyKey.G << 8) | (transparencyKey.B << 0));

BitmapData bitmapData = bitmap.LockBits( bounds, ImageLockMode.ReadOnly,
PixelFormat.Format32bppArgb );
uint* pixelPtr = (uint*)bitmapData.Scan0.ToPointer();

int yMax = (int)boundsF.Height;
int xMax = (int)boundsF.Width;
GraphicsPath path = new GraphicsPath();
for ( int y = 0; y < yMax; y++ )
{
byte* basePos = (byte*)pixelPtr;
for ( int x = 0; x < xMax; x++, pixelPtr++ )
{
if ( *pixelPtr == key )
continue;
int x0 = x;
while( x < xMax && !( *pixelPtr == key ) )
{
++x;
pixelPtr++;
}
path.AddRectangle( new Rectangle( x0, y, x-x0, 1 ) );
}
pixelPtr = (uint*)(basePos + bitmapData.Stride);
}
Region region = new Region( path );
path.Dispose();
bitmap.UnlockBits( bitmapData );
return region;
}


and87 Profilo | Newbie

Ciao Brainkiller, io invece vorrei fare proprio la cosa detta da te..Cioè ridisegnare la form con angoli non "originali".
Mi troveresti le API per favore?
Grazie
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5