Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[WPF] Caricare un'immagine dalle risorse...

220 views
Skip to first unread message

Alessandro Pulvirenti

unread,
Jan 26, 2009, 11:24:02 AM1/26/09
to
Devo caricare un'immagine dalle risorse utilizzando C#.

Però non vorrei passare dall'URI per caricare l'immagine in quanto sò già
che è nelle risorse e non voglio caricarla da una directory esterna, come
faccio?

Se utilizzassi URI farei così:

BitmapImage l_Img = new BitmapImage();
// -------------------------------------------
l_Img.BeginInit();
l_Img.UriSource = new Uri(sUri, UriKind.Relative);
l_Img.EndInit();

mentre è possibile usare un metodo, semplice, per caricare un'immagine dalle
risorse interne dell'applicazione standalone?

Poi vorrei tagliare una un'area rettangolare dell'immagine per metterla
dentro un bottone,
come prendo la sub-immagine da inserire nel bottone?

Grazie
Alex


Corrado Cavalli [MVP]

unread,
Jan 26, 2009, 1:26:24 PM1/26/09
to
Alessandro Pulvirenti expressed precisely :

> Devo caricare un'immagine dalle risorse utilizzando C#.
>
> Però non vorrei passare dall'URI per caricare l'immagine in quanto sò già che
> è nelle risorse e non voglio caricarla da una directory esterna, come faccio?
>
> Se utilizzassi URI farei così:
>
> BitmapImage l_Img = new BitmapImage();
> // -------------------------------------------
> l_Img.BeginInit();
> l_Img.UriSource = new Uri(sUri, UriKind.Relative);
> l_Img.EndInit();
>
> mentre è possibile usare un metodo, semplice, per caricare un'immagine dalle
> risorse interne dell'applicazione standalone?

BitmapImage img = new BitmapImage(new Uri("Images/test.jpg",
UriKind.Relative));

>
> Poi vorrei tagliare una un'area rettangolare dell'immagine per metterla
> dentro un bottone,
> come prendo la sub-immagine da inserire nel bottone?
>

Puoi usare un rectangle come placeholder per l'immagine usando un
ImageBrush come sfondo e usare ViewPort per decidere quale area
dell'immagine usare.

HTH


> Grazie
> Alex

--
Corrado Cavalli [Microsoft .NET MVP-MCP]
UGIdotNET - http://www.ugidotnet.org
Weblog: http://blogs.ugidotnet.org/corrado/


Alessandro Pulvirenti

unread,
Jan 27, 2009, 6:36:18 AM1/27/09
to

"Corrado Cavalli [MVP]" <corradoN0...@mvps.0rg> ha scritto nel
messaggio news:6u6diiF...@mid.individual.net...

> Alessandro Pulvirenti expressed precisely :
>> Devo caricare un'immagine dalle risorse utilizzando C#.
>>
>> Però non vorrei passare dall'URI per caricare l'immagine in quanto sò già
>> che è nelle risorse e non voglio caricarla da una directory esterna, come
>> faccio?
>>
>> Se utilizzassi URI farei così:
>>
>> BitmapImage l_Img = new BitmapImage();
>> // -------------------------------------------
>> l_Img.BeginInit();
>> l_Img.UriSource = new Uri(sUri, UriKind.Relative);
>> l_Img.EndInit();
>>
>> mentre è possibile usare un metodo, semplice, per caricare un'immagine
>> dalle risorse interne dell'applicazione standalone?
>
> BitmapImage img = new BitmapImage(new Uri("Images/test.jpg",
> UriKind.Relative));

Queste istruzioni vanno bene se metto l'immagine in un controllo "Image";
se invece li debbo inserire in un oggetto "ImageBrush" in modo da poter
ricoprire una superficie 3D,
il programma durante l'esecuzione mi cerca le immagini in un percorso
esterno al programma,
anche se relativo alla directory corrente o assoluto!

Non riesco a fargli capire che la risorsa è incorporata nell'eseguibile e
non deve andarla a cercare all'esterno!

Come posso fare?
Grazie
Alex


Corrado Cavalli [MVP]

unread,
Jan 27, 2009, 4:43:51 PM1/27/09
to
It happens that Alessandro Pulvirenti formulated :

Strano, la build action dell'immagine è impostata a "Resource", di
solito fa cosi quando è impostata a "Content"

Alessandro Pulvirenti

unread,
Jan 27, 2009, 5:35:40 PM1/27/09
to

"Corrado Cavalli [MVP]" <corradoN0...@mvps.0rg> ha scritto nel
messaggio
>> Queste istruzioni vanno bene se metto l'immagine in un controllo "Image";
>> se invece li debbo inserire in un oggetto "ImageBrush" in modo da poter
>> ricoprire una superficie 3D,
>> il programma durante l'esecuzione mi cerca le immagini in un percorso
>> esterno al programma,
>> anche se relativo alla directory corrente o assoluto!
>>
>> Non riesco a fargli capire che la risorsa è incorporata nell'eseguibile e
>> non deve andarla a cercare all'esterno!
>>
>> Come posso fare?
>> Grazie
>> Alex
>
> Strano, la build action dell'immagine è impostata a "Resource", di solito
> fa cosi quando è impostata a "Content"

Ho controllato... è impostato a "Resource".
La cosa strana è che se prendo un controllo Image e gli carico un'immagine
con le stesse istruzioni precedenti,
tutto funziona correttamente, le risorse vengono prese da dentro
l'eseguibile.

Se invece la destinazione è un "ImageBrush" da utilizzare per fare un
riempimento di un oggetto 3D,
invece l'immagine viene cercata fuori dall'eseguibile, nel percorso
specificato!

Potete vedere se è un bug già segnalato da qualcuno alla Microsoft...

Grazie
Alex


Corrado Cavalli [MVP]

unread,
Jan 28, 2009, 12:35:06 AM1/28/09
to
Alessandro Pulvirenti laid this down on his screen :

Questo:

<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="ImageBrush.Window1"
x:Name="Window"
Title="Window1"
Width="640" Height="480">
<Window.Resources>
<ImageBrush x:Key="ImageBrush1" ImageSource="/Images/test.jpg"/>
</Window.Resources>

<Grid x:Name="LayoutRoot">
<Rectangle Fill="{DynamicResource ImageBrush1}" Stroke="#FF000000"
Margin="182,40,305,0" VerticalAlignment="Top" Height="108"/>
</Grid>
</Window>

Funziona perfettamente e recupera l'immagine dalle risorse
dell'applicazione.

HTH

Alessandro Pulvirenti

unread,
Jan 28, 2009, 12:55:46 AM1/28/09
to

"Corrado Cavalli [MVP]" <corradoN0...@mvps.0rg> ha scritto nel
messaggio news:6ua94gF...@mid.individual.net...

Lo debbo fare in C#, in quanto le immagini sono tante e io debbo poter
scegliere facilmente e anche in modo Random l'immagine da caricare...

Può darsi che tramite codice c# ci sia un Bug mentre in XAML funziona tutto
bene...
sempra strana una cosa del genere!

Alex


Corrado Cavalli [MVP]

unread,
Jan 28, 2009, 1:21:36 AM1/28/09
to
After serious thinking Alessandro Pulvirenti wrote :

Prova in questo modo:
Uri uri=new Uri("pack://application:,,,/Images/untitled.jpg");
BitmapImage img=new BitmapImage(uri);
ImageBrush brush = new ImageBrush(img);
rect.Fill = brush;

Alessandro Pulvirenti

unread,
Jan 28, 2009, 1:48:51 AM1/28/09
to

"Corrado Cavalli [MVP]" <corradoN0...@mvps.0rg> ha scritto nel
messaggio news:6uabrnF...@mid.individual.net...

>> Lo debbo fare in C#, in quanto le immagini sono tante e io debbo poter
>> scegliere facilmente e anche in modo Random l'immagine da caricare...
>>
>> Può darsi che tramite codice c# ci sia un Bug mentre in XAML funziona
>> tutto bene...
>> sempra strana una cosa del genere!
>>
>> Alex
>
> Prova in questo modo:
> Uri uri=new Uri("pack://application:,,,/Images/untitled.jpg");
> BitmapImage img=new BitmapImage(uri);
> ImageBrush brush = new ImageBrush(img);
> rect.Fill = brush;

Mitico!
Funziona!
Però non riesco a capire da dove viene quel formato di Uri...
Nella documentazione non ho trovato una cosa del genere.

Grazie mille!

Alex


Alessandro Pulvirenti

unread,
Jan 28, 2009, 1:55:02 AM1/28/09
to

"Alessandro Pulvirenti" <al...@alessandropulvirenti.it> ha scritto nel
messaggio news:%23Ev98RR...@TK2MSFTNGP05.phx.gbl...

> Mitico!
> Funziona!
> Però non riesco a capire da dove viene quel formato di Uri...
> Nella documentazione non ho trovato una cosa del genere.

adesso cercando bene, ho trovato la documentazione...
In WPF, dove si richiede un Uri, non è stata collegata la documentazione che
spiega la parte estesa del formato Uri,
quella che include "pack".

Comunque... tutto bene!

Grazie mille!
Alex


0 new messages