Zabawa z LINQ

by Piotrosz 29. August 2009
Przykład zastosowania LINQ do zmiany nazw wielu plików.
Proszę sobie wyobrazić, że mam ok. 2000 takich plików:
animacja (1).jpg
animacja (2).jpg
animacja (3).jpg
...
animacja (100).jpg
...
animacja (2000).jpg
i chciałbym stworzyć z tych obrazów animacje poklatkową. Niestety program do robienia animacji nie rozumie, że powinien utworzyć film układając obrazki w kolejności numerów w nawiasach, tylko układa sortując wg. nazw. Tak samo z resztą jak metoda Directory.GetFiles():


Jak widać kolejność jest do niczego i animacja nie wyjdzie, jeśli złożę obrazki w tej kolejności. Chciałbym więc pozmieniać nazwy tych plików na:
00001.jpg
00002.jpg
00003.jpg
...
00100.jpg
...
02000.jpg
Oczywiście kolejność numerów w nawiasach musi zostać zachowana, bo inaczej animacja będzie bez sensu. Można to zrobić korzystając z LINQ!
var OrderedList =
    from file2 in
        (from file in Directory.GetFiles(@"F:\film", "*.jpg")
         select new
         {
             // Pewnie jakoś bardziej elegancko da się wyłuskać numer z nazwy
             Nr = Convert.ToInt32(string.Join(null, Regex.Split(file, "[^\\d]"))),
             FInfo = new FileInfo(file)
         })
    orderby file2.Nr // Sortowanie po znalezionym numerze
    select file2;

// teraz można zmieniać nazwy
foreach(var elmnt in OrderedList)
    elmnt.FInfo.MoveTo(string.Format("{0}\\{1}.jpg", elmnt.FInfo.DirectoryName, elmnt.Nr.ToString("0000#")));
Przed zmianą nazw podejrzałem sobie jak wygląda OrderedList:


Nawiasem pisząc, animację poklatkową z wielu obrazków jpg można stworzyć programem ffmpeg, który jest na Ubuntu (hi hi hi):
ffmpeg -r 8 -b 1800 -i /media/DANE/film/%05d.jpg -f avi -vcodec mjpeg ~/Film.avi
Niestety przy takiej liczbie fotografii Windows Movie Maker odmówił współpracy, a ffmpeg przemielił wszystko w parę sekund. Na koniec można dodać muzykę od filmu takim poleceniem:
mencoder ~/Film.avi -o film2.avi -ovc copy -oac copy -audiofile ~/Film.mp3
A oto link do mojej wspaniałej animacji: http://www.youtube.com/watch?v=9YdFJGT1_xk

Strona Babity

by Piotrosz 20. August 2009

Zamieszczam link do strony Babity Das, którą niedawno zmontowałem: www.babitadas.com.

XSLT: If

by Piotrosz 13. August 2009
Przykład zastosowania instrukcji <xsl:if test='warunek'>
Lista utworów dłuższych niż 3 minuty:

  
    
      
        Przykład 4 - if
        
      
      
        

Utwory dłuższe niż 3 minuty:

  • ()
  • Zastosowałem ten sam plik XML co w poprzednim wpisie.

    Link do pliku XSL: RecordsIf.xsl.

    A oto wynikowy plik HTML.

    Tags:

    XML | XSLT

    Otwieranie plików w określonym kodowaniu

    by Piotrosz 7. August 2009
    W przypadku rozwiązywania problemów z kodowaniem na stronach www (gdy zamiast polskich znaków pojawiają się krzaczki) przydatne mogą okazać się możliwości Visual Studio, które potrafi otworzyć i zapisać plik w określonym kodowaniu.

    Otworzenie pliku z możliwością wybrania kodowania (File->Open File->Open With):







    i zapisanie pliku w określonym kodowaniu (File->Save As->Save With):



    Pozwala to uzgodnić kodowanie strony, gdy występuje jakiś konflikt stron kodowych.

    Domyślne kodowanie ustawia też plik web.config:
    <globalization culture="auto:pl-PL" uiCulture="auto:pl-PL" requestEncoding="UTF-8" responseEncoding="UTF-8" />
    

    Powered by BlogEngine.NET 1.5.0.7
    Theme by Mads Kristensen