主にプログラミングに関して。Python, .NET Framework(C#), JavaScript, その他いくらか。
記事にあるサンプルやコードは要検証。使用に際しては責任を負いかねます

スポンサーサイト

                
tags:
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Boo: C#などの.NET Frameworkで使えるサムネイルジェネレータクラス

                
少し前に書いた動画からサムネイルを作るクラスを、インスタンスをつくる形に書き換えた。

サムネイルジェネレータに動画を読み込ませると時間を取られる。だから一つの動画ファイルから複数のサムネイルを得たいときに、以前の書き方では効率が悪かった。なのでインスタンスを作り、動画情報を保持してそこからサムネイルを作れるように書き換えた。

動作に必要なのは、
.NET Framework 4.0↑
.Microsoft Expression Encoder 4(フリー版でいい)


namespace BooThumbnailGenerator

import System
import System.Drawing
import System.Drawing.Imaging
import System.IO
import Microsoft.Expression.Encoder


public class GeneratorClass:
private generator as ThumbnailGenerator
private avFile as AudioVideoFile

def constructor(src as string):
if not File.Exists(src):
raise System.ArgumentException("Source file not found: ", src)
avFile = null as AudioVideoFile
try:
avFile = AudioVideoFile(src)
except error:
raise error

// Create ThumbnailGenerator object to get thumbs from AudioVideoFile
generator = avFile.CreateThumbnailGenerator(avFile.VideoStreams[0].VideoSize)

public def SaveThumbnail(outputName as string, point as double) as void:
if File.Exists(outputName):
raise System.ArgumentException(outputName + " is already exists!")

thumbnail = GetThumbnail(point)
thumbnail.Save(outputName, ImageFormat.Jpeg)
thumbnail.Dispose()

public def GetThumbnail(point as double) as Bitmap:
// Gets the time for each thumbnail.
if point > avFile.Duration.TotalSeconds:
print(avFile.Duration.TotalSeconds)
raise System.ArgumentException("Over a duration")

// Gets image based on timing
thumbnail = generator.CreateThumbnail(TimeSpan.FromSeconds(point))

generator.Dispose()
return thumbnail


C#からはDLLを参照して以下のように使う。
using System;
using System.Drawing;
using BooThumbnailGenerator;

namespace CsTester
{
class Program
{
public static void Main(string[] args)
{
var thumbGenerator = new GeneratorClass(@"videofilename");
thumbGenerator.SaveThumbnail("hoge.jpg", 15.0);
Bitmap bitmap = thumbGenerator.GetThumbnail(17.0);
bitmap.Save("hofe.png");
bitmap.Dispose();

Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
}
}
            

コメントの投稿

非公開コメント

プロフィール

hMatoba

Author:hMatoba
Github

最新記事
リンク
作ったものなど
月別アーカイブ
カテゴリ
タグリスト

検索フォーム
Amazon
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。