Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Problem sa snimanjem slike

[es] :: .NET :: WPF Programiranje :: Problem sa snimanjem slike

[ Pregleda: 1927 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

wex-alpha
Sarajevo

Član broj: 7580
Poruke: 845
..to512.806592-163.bih.net.ba.



+13 Profil

icon Problem sa snimanjem slike23.06.2010. u 13:18 - pre 168 meseci
Ono sto zelim da uradim je da odaberem sliku (HD, USB...). Ta se slika prikaze, i onda na da je snimim na proizvoljnu lokaciju. Ali imam problema.

Koristim OpenFileDialog i image kontrolu za prikaz slike. Evo koda:

Code (csharp):

 Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();

            dlg.Filter = "Image Files(*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF|All files (*.*)|*.* ";
            if (dlg.ShowDialog() == true)
            {
                Stream stream = File.Open(dlg.FileName, FileMode.Open);
                BitmapImage imgsrc = new BitmapImage();
           
                imgsrc.BeginInit();  
                imgsrc.StreamSource = stream;
                imgsrc.EndInit();
                image1.Source = imgsrc;                

            }

            RenderTargetBitmap rtb = new RenderTargetBitmap(800, 800, 96, 96, PixelFormats.Pbgra32);
            rtb.Render(image1);

            JpegBitmapEncoder jpg = new JpegBitmapEncoder();
            jpg.Frames.Add(BitmapFrame.Create(rtb));
            using (Stream fs = File.Create("c:\\test.jpg"))
            {
                jpg.Save(fs);
            }
           
 



Imam 2 problema sa ovim kodom.

1. Kada odaberem sliku prvi put (ne zatvaram program), on napravi samo crnu sliku. Kada odaberem drugu sliku onda program snimi prvu sliku. Dakle kasni... kako????


2. Drugi problem je "This file is in use". To se desava ako odaberem istu sliku.
Probao sam da ga rijesim dodavanjem sljedeceg koda:
Code (csharp):

                imgsrc.BeginInit();
                imgsrc.CreateOptions = BitmapCreateOptions.IgnoreImageCache;
                imgsrc.CacheOption = BitmapCacheOption.OnLoad;
                imgsrc.StreamSource = stream;
                imgsrc.EndInit();
                image1.Source = imgsrc;    

 

Ali onda mi program puca na

Code (csharp):

 imgsrc.EndInit();
 


Sa greskom "Key cannot be null".



Muka mi je od ovog koda vise, ako ime jednostavno rjesenje za ono sto zelim... help :)
 
Odgovor na temu

wex-alpha
Sarajevo

Član broj: 7580
Poruke: 845
85.158.34.*



+13 Profil

icon Re: Problem sa snimanjem slike23.06.2010. u 16:36 - pre 168 meseci
Rijesio sam problem broj 1. tako sto sam razbio metodu na dvije razlicite metode.


1.
Code (csharp):

Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();

            dlg.Filter = "Image Files(*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF|All files (*.*)|*.* ";
            if (dlg.ShowDialog() == true)
            {
                Stream stream = File.Open(dlg.FileName, FileMode.Open);
                BitmapImage imgsrc = new BitmapImage();
           
                imgsrc.BeginInit();  
                imgsrc.StreamSource = stream;
                imgsrc.EndInit();
                image1.Source = imgsrc;                

            }

 





2.
Code (csharp):


RenderTargetBitmap rtb = new RenderTargetBitmap(800, 800, 96, 96, PixelFormats.Pbgra32);
            rtb.Render(image1);

            JpegBitmapEncoder jpg = new JpegBitmapEncoder();
            jpg.Frames.Add(BitmapFrame.Create(rtb));
            using (Stream fs = File.Create("c:\\test.jpg"))
            {
                jpg.Save(fs);
            }


 



Sad me interesuje koji je wpf ekvivalent ovome:

Code (csharp):

Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();
 

 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Problem sa snimanjem slike23.06.2010. u 16:48 - pre 168 meseci
FIle lock dobijas zato sto GDI drzi lock na graphics objektima cak i kad ih nekoristi trenutno. Napravi inmemory kopiju bitmape i disposuj bitmap baziran na fajlu.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

wex-alpha
Sarajevo

Član broj: 7580
Poruke: 845
85.158.34.*



+13 Profil

icon Re: Problem sa snimanjem slike23.06.2010. u 16:52 - pre 168 meseci
Mislis da koristim memorystream?
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Problem sa snimanjem slike25.06.2010. u 09:31 - pre 168 meseci
da, samo ne zaboravi da disposujes bitmap baziran na fajlu (inace lock nece biti oslobodjen dok GC ne finalizuje objekat)
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

[es] :: .NET :: WPF Programiranje :: Problem sa snimanjem slike

[ Pregleda: 1927 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.