Giter Club home page Giter Club logo

beutl's Issues

例外処理の見直し

  • 全体的な例外処理を見直す

  • 例外のメッセージを多言語対応する

  • Drawing

  • Media

  • Setting

  • Core

  • WPF(catchのみ)

図形の追加

  • 三角形
  • 五角形
  • 六角形
  • パス
  • 角丸四角形(BEditor.Drawingには追加済み)

GUIの変更

  • PropertyMetadataからプロパティの値をリセットする機能を実装する
  • IBindableを検索するウィンドウ

ComponentElementの追加

PropertyElementを継承する特に意味のないUIコンポネートを作成する

  • ButtonComponent【ボタン】
  • LabelComponent【stringを表示するUI】

UIの最適化

古いバージョンの頃の処理が放置されているので、UIの再構築をする。

クロスプラットフォーム開発

.NET MAUIに向けてMVVMをしっかり作る

クロスプラットフォームの対応状況

  • BEditor.Audio
  • BEditor.Core
  • BEditor.Media
  • BEditor.Drawing
  • BEditor.Graphics
  • BEditor.Primitive
  • BEditor.WPF - WPFがWindows限定
  • BEditor.WPF.Controls - WPFがWindows限定

Github Pages

FirebaseでのhostingからGithub Pagesに移行

編集データ管理

SceneクラスのSceneNameとIHasName.Nameで同じ値を返しているので、
SceneNameに "."を含めるとプロパティのバインディングが壊れる

PropertyElementの追加

PropertyElementを継承するプロパティを追加する

  • ValueProperty【値のみ入力】
  • TextProperty【1行のみの文字列】
  • FolderProperty【フォルダ選択】
  • DialogProperty【Groupを継承したダイアログ】

Timelineを見やすくする

  • レイヤーの表示/非表示を分かりやすくする
  • レイヤーのスケールを直接調節できるようにする
  • クリップが重なった場合に空いているスペースに移動

ディレクトリのマネージャーを作る

user/pluginsなどのディレクトリが消される可能性があるのでディレクトリを管理するクラスを作る

管理するディレクトリ

  • user/colors
  • user/plugins
  • user/backup
  • user/logs

BEditorでプロジェクトファイルを新規作成・読み込むとクラッシュする。

問題の再現
再現方法(?):

  1. プロジェクトファイルを新規作成します。
  2. 一瞬編集画面(タイムライン?)が表示されてから、「BEditor.Graphics.GraphicsException」がスローされてクラッシュ
    または:
  3. すでに作成されたプロジェクトファイルを開く
  4. すぐにフリーズしてクラッシュする

スクリーンショット
プロジェクトファイル新規作成時に一瞬表示されるエラー
クラッシュ前に一瞬表示されるエラー

PC :

  • OS: Windows10 Pro InsiderPreview Build: 21313.1000(64Bit);
  • CPU: Ryzen3 3100;
  • Ram: DDR4-3200 16GB;
  • GPU: Geforce GTX1650;

その他
スタートウィンドウを表示しない設定にして編集画面から新規プロジェクトを作成しても同じ挙動になる。

最適化

描画を編集データによって最適化する

  • サイズ: 100, ライン幅: <= 50, 種類: 四角形
    • 画像をFill
  • 透明度が0%
    • 描画しない

個別オブジェクトの実装

ImageObjectの時点で個別オブジェクト

  • MultipleImageObjectを実装
  • Renderメソッド内で画像をforeachする

エフェクトの途中から個別オブジェクトになる場合

  • MultipleImageEffectを実装
public interface IMultipleImageObject
{
    public IEnumerable<Image<BGRA32>> Render(EffectRenderArgs args);

    public void Rendered(EffectRenderArgs<Image<BGRA32>[]> args, int index, bool islast)
}
public interface IMultipleImageEffect
{
    public IEnumerable<Image<BGRA32>> Render(EffectRenderArgs<Image<BGRA32>> args);
}

IObserveble, IObserverを弱参照で管理する

Subscribeメソッドの戻り値が処理されない場合、オブジェクトの解放が遅れるので、以下のようにする

private readonly List<WeakReference<IObserver<T>>> _observers = new();

public IDisposable Subscribe(IObserver<T> observer)
{
    _observer.Add(new(observer));
    // ...
}

相対パスで保存

FileProperty, FolderProperty をプロジェクトからの相対パスと絶対パスで選べるようにする

マネージド画像

BEditor.Core.Media.ImageクラスがOpenCv.Matのラッパークラスみたくなっているので、

  • 画像処理 = OpenCv
  • メモリ管理 = .NET
    のようにする

詳細

  • class = Drawing.Image<T>
  • Tはピクセルの構造体
  • C++とのInterop用の構造体 = Drawing.Interop.ImageStruct
  • 出来るならC#でも実装する(フリップ,領域拡張などの領域操作)

日本語フォントの描画

Skiasharpで日本語フォントを描画すると豆腐になるので、
次のバージョンからファイルの読み込みを以前のものに復元する

DataContractシリアライザーが機能していない

状態

  • DataContractシリアライザのコンストラクタにKnownTypesを指定しても、反映されない
  • KnownTypeAttributeを使うとシリアル化できる

問題点

  • Attributeは動的に変更できないのでプラグインによって追加されたエフェクトのシリアル化ができない

#32 スクリプトで編集

CLIツールの bedit open で編集する時、replっぽくする

メモ

  • C#スクリプトを使う
  • セミコロンなし
  • メソッド
    • Save([file])
    • List(clips or scenes or effects)
    • Prop(path)
    • Add(range, layer, type[, setcurrent = false])
    • Add(type)
    • Add(width, height, background)
    • Remove(clip)
    • Remove(effect)
    • Move(layer)
    • Move(range)
    • HideLayer(layer)
    • ShowFrame()
    • Undo([count = 1])
    • Redo([count = 1])
    • Encode(file)
    • EncodeImg(file, frame)
  • プロパティ
    • Directory get
    • Name get
    • Samplingrate get
    • Framerate get
    • Scene
    • Scenes
    • Clip
    • Clips

BaseRenderingContextが動作していない

OpenTK のアップデートの影響でGLControlからGameWindowのオフスクリーン描画に移行したが
描画されずにGL.ReadPixelで空の画像が返ってしまう

自分用Todo

  • 通常の運用(GameWindow)で描画されるか調べる
  • 描画されない場合GLFWの関数を直接呼び出す

作成系ウィンドウの変更

  • プロジェクト作成
  • シーン、クリップ、エフェクト追加

などのウィンドウをスタートウィンドウのようなサイズにする

動画の入出力

FFmpegを利用して動画の入出力をする

1.xのリリースで追加

GUIの変更

  • ReactiveExtensionに対応しているPropertyElementのGUIの変更
  • UndoRedoコマンドをクエリで検索し実行できるようにする
  • SceneManagerが中途半端なので廃止(ObjectViewerに移動)

コマンドラインツールを作る

コマンドラインで操作するツールを作る

実装コマンド (プロジェクトを操作)

  • encode - 動画に出力する
  • encode_img - 画像に出力する
  • json - json形式で出力する
  • クリップ、シーン、エフェクトの追加など

その他

  • 設定の表示
  • 読み込むフォントの列挙
  • 読み込むプラグインの列挙

AviUtl Exedit Interop

AviUtl Exedit Interop

KENくん氏のソフトウェアAviUtlとExeditとの相互運用のために以下の機能を持つ拡張機能を作る

  • exoファイルの入出力
  • エイリアスファイルの入出力
  • luaスクリプリティング(対応出来ないapiは無視)

開発リポジトリ

プラグインのロード

プラグインの読み込みをユーザーが許可するまで読み込まない方法に変更

  • ロードするかはSettingsに保存する
  • Settingsに見つからないプラグインがある場合、確認のダイアログを表示

エフェクト類の修正

  • 膨張と収縮にサイズを変更するかのプロパティを追加
  • ぼかし, ガウスブラー, MedianBlurを分ける

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.