iPhone/iPad用ドット絵エディタ「EDGE touch」

最近のエントリー

SINさんより、Roland SD-50用の音源定義ファイルをご投稿いただきました。
ありがとうございましたm(_ _)m

ダウンロードはこちらの下の方からどうぞ。
https://takabosoft.com/domino/module

SINさんのサイト(hatena)はこちらです。
http://d.hatena.ne.jp/SIN-28/

他にも音源定義ファイルを公開されている方、ご提供いただける方はメールにてご連絡ください。
こちらでリンクを貼らせていただきます。

新年あけましておめでとうございます。
本年もよろしくお願いいたします。

・・・とブログを書こうと思ってだらだら過ごしていた結果がもう5日です、酷いモンです。

昨年は体調が悪いことが多く、絶不調な1年だったなぁと思います。
なので今年は健康第一で心身ともに元気にやっていきたいと思います。

運動不足も深刻なので、なんとか体を動かしていきたいです。
これはプログラマ、というか自宅大好きな人には課題ですね。
昨年水泳道具をとりあえず揃えたのに結局(温水)プールに行かなかったので、今年こそは行ってみたいと思います。
そして出来れば毎週通いたいです。
(せっかく近場に新しい市営プールが出来たので、行こう行こうとは思っていたのですが。)

wii fitのバランスボードも何故か故障(電池変えても反応しない)しているので、今年中には修理に出したいと思います。
(なんか梱包とか郵送したりするの面倒くさいなぁと思いつつ年が明けてしまいました。)

プログラムの方は去年は・・・

  • C++(Windowsアプリ開発):多め
  • C#(Windowsアプリ開発):ちょろっと
  • Objective-C(iPhoneアプリ開発):ちょろっと
  • Java(Androidアプリ開発):ちょろっと
  • ActionScript(AIR/Flexアプリ開発):ちょろっと

という感じでした。

今年はC#を触る機会がもう少し増えそうです。
C#はDispose(using)地獄さえ見なければすごく扱いやすいので、お気に入りです。

そんなわけで、今年もお付き合いをお願いいたしますm(_ _)m

最近C#を勉強してます(というか一通り勉強し終わった感じです)。
WPFだとドロップシャドウを簡単に付けれるのですが、Formだと出来ないっぽいので、ちょっと作ってみました。

Edge1

影の色や不透明度、ぼかし具合も自由に変えられます。
対象がBitmapなので、やろうと思えば文字列にドロップシャドウを加えることも出来ます。

/// <summary>
/// ドロップシャドウを加えた新しいビットマップを作成します。
/// </summary>
/// <param name="srcBmp">対象のビットマップ</param>
/// <param name="blur">ぼかし</param>
/// <param name="distance">影の距離</param>
/// <param name="shadowColor">影の色</param>
/// <param name="baseOffset">描画先オフセット値の格納先</param>
/// <returns>ドロップシャドウが加えられた新しいビットマップ</returns>
private static Bitmap AppendDropShadow(Bitmap srcBmp, int blur, Point distance, Color shadowColor, out Point baseOffset)
{
    baseOffset = new Point(0, 0);
    if (srcBmp == null || blur < 0)
    {
        return null;
    }

    // ドロップシャドウを含めた新しいサイズを算出
    Rectangle srcRect = new Rectangle(0, 0, srcBmp.Width, srcBmp.Height);
    Rectangle shadowRect = srcRect;
    shadowRect.Offset(distance.X, distance.Y);
    Rectangle shadowBlurRect = shadowRect;
    shadowBlurRect.Inflate(blur, blur);
    Rectangle destRect = Rectangle.Union(srcRect, shadowBlurRect);
    baseOffset.X = destRect.X - srcRect.X;
    baseOffset.Y = destRect.Y - srcRect.Y;

    Bitmap destBmp = new Bitmap(destRect.Width, destRect.Height, PixelFormat.Format32bppArgb);

    // 影部分をレンダリングする
    BitmapData destBmpData = destBmp.LockBits(new Rectangle(0, 0, destRect.Width, destRect.Height), ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);
    BitmapData srcBmpData = srcBmp.LockBits(srcRect, ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);

    unsafe
    {
        byte* destLine = (byte*)destBmpData.Scan0 + (shadowBlurRect.Y - destRect.Y) * destBmpData.Stride + (shadowBlurRect.X - destRect.X) * 4;
        byte* srcBeginLine = (byte*)srcBmpData.Scan0 + (- blur - blur) * srcBmpData.Stride + (- blur - blur) * 4;

        int destWidth = shadowBlurRect.Width;
        int destHeight = shadowBlurRect.Height;

        int srcWidth = srcBmp.Width;
        int srcHeight = srcBmp.Height;

        int div = (1 + blur + blur) * (1 + blur + blur);

        byte r = shadowColor.R;
        byte g = shadowColor.G;
        byte b = shadowColor.B;
        float alpha = shadowColor.A / 255.0f;

        int destStride = destBmpData.Stride;
        int srcStride = srcBmpData.Stride;

        for (int destY = 0; destY < destHeight; destY++, destLine += destStride, srcBeginLine += srcStride)
        {
            byte* dest = destLine;
            byte* srcBegin = srcBeginLine;
            for (int destX = 0; destX < destWidth; destX++, dest += 4, srcBegin += 4)
            {
                // α値をぼかす
                int total = 0;
                byte* srcLine = srcBegin;
                for (int srcY = destY - blur - blur; srcY <= destY; srcY++, srcLine += srcStride)
                {
                    if (srcY >= 0 && srcY < srcHeight)
                    {
                        byte* src = srcLine;
                        for (int srcX = destX - blur - blur; srcX <= destX; srcX++, src += 4)
                        {
                            if (srcX >= 0 && srcX < srcWidth)
                            {
                                total += src[3];
                            }
                        }
                    }
                }

                dest[0] = b;
                dest[1] = g;
                dest[2] = r;
                dest[3] = (byte)((total / div) * alpha);
            }
        }
    }

    srcBmp.UnlockBits(srcBmpData);
    destBmp.UnlockBits(destBmpData);

    // 元の画像を重ねる
    using (Graphics g = Graphics.FromImage(destBmp))
    {
        g.DrawImage(srcBmp, srcRect.X - destRect.X, srcRect.Y - destRect.Y, srcBmp.Width, srcBmp.Height);
    }

    return destBmp;
}

LockBitsはtry catchした方が良かったかな、まあいいか。

Domino Ver.1.38からチャネルプレッシャーの出力処理が正しく行われていませんでしたので、修正版を出しておきます。

ダウンロードはこちらからどうぞ。
https://takabosoft.com/domino

細かい部分でも構いませんので、またもし不具合を見つけられましたらwikiやメール等でご連絡ください。

EDGE2更新しました。

今回からXPの視覚テーマをなるべく適用するようにしました(XP/Vista/7では画面の見た目が変わります)。
これを機に、取扱説明書のスクリーンショットを全て撮り直し、形式もMS-Word形式からchm形式に変更し、本体に同梱するようにしました。
(製品として説明書が同梱していないのは駄目ですよね(^^;)
説明書の中身は同じです。

ダウンロードはこちらからどうぞ。
https://takabosoft.com/edge2

変更点一覧

  • [多角形]ツール、[多角形塗りつぶし]ツール、[多角形の選択]ツールにおいて、頂点追加中に限り、マウスカーソルが画像の端に行った時に自動スクロールが行われるようにしました。
    オプションバーの[自動スクロール]でオン/オフを切り替えることができます。
  • edg形式の保存と読み込み時に、メモリを節約するようにしました(巨大なデータをedg形式で読み書きすると、メモリ不足に陥る事があるため)。
  • ファイルを上書き保存する際、トラブルが起きても元のファイルが破壊されないように、一度別名で書き出しを行い、成功したら元のファイルへリネームするようにしました。
  • レイヤのコピー/貼り付け機能を実装しました。
    画像間またはページ間でレイヤをまとめてコピーする事が出来るようになりました。
  • ページのコピー/貼り付け機能を実装しました。
    画像間でページをまとめてコピーする事が出来るようになりました。
  • ユーザー未登録時の広告を廃止しました。
  • OSの視覚テーマ(XP以降)がなるべく反映されるようにしました。
    副作用が出るため、タブコントロールとヘッダーコントロールはテーマをオフにしています。
    Vista以降はメニューのデザインも変わります。
  • ポジション、アニメーションプレイヤの表示倍率の初期値を設定できるようにしました。
    [環境設定]画面の[ポジション]または[アニメーションプレイヤ]から設定できます。
  • 文字の描画時において、行間と文字間隔にマイナス値を指定できるようにしました。
    ただし、あくまで詰める事が出来るだけで順番が反転するような事は出来ません。
  • バックアップのオプションに[データ変更時のみバックアップを行う]を追加しました(最初の1回は必ずバックアップされます)。
  • エディットウィンドウ位置・サイズを記憶・復元出来るようにしました。
    また、新しいウィンドウの位置・サイズとしても利用出来るようにしました。
    [ウィンドウ]メニューの[ウィンドウの位置・サイズ]から操作できます。
  • Ver.1.09からハンドツールでダブルクリックした際に中央へスクロールする機能を追加しましたが、ハンドツールのオプションバーからオン/オフを切り替えられるようにしました。
    デフォルトはオフです。
  • ページウィンドウやレイヤウィンドウでホイールが効くようにしました(アクティブにしなくても効きます)。
  • ファイルダイアログのショートカットキーをいくつか追加しました。
    また、タブキーを押したときのフォーカスの移動も改良を加えました。
  • 環境設定で[ページ間で選択範囲情報を共有する]がオンの場合において、画像サイズが小さいページへ編集ページを変更したときに、余白が描画されない事がある不具合を修正しました。
  • 起動時にフォルダに書き込み権限があるかをチェックするようにしました。

記事検索

コミュニティ

Banner designed by 真帆様
ドット絵掲示板
ドット絵掲示板
自作の「ドット絵」を投稿することができます。ドッターさん同士の交流の場としてご利用ください。
TakaboSoft Wiki
TakaboSoft Wiki
ソフトウェアに関する質問・不具合報告・要望などを書き込むことができます。