「日記2010年9月その3」の編集履歴(バックアップ)一覧に戻る
日記2010年9月その3」を以下のとおり復元します。
*2010/9/22

ソーマキューブというパズルの問題。
7つのピースを使ってこの形を作れるかな。

十字架。
&ref(十字架.png)


犬
&ref(ソーマキューブ犬.png)
もう少し犬っぽい形があるような気がする。







*2010/9/30
&ref(水彩画風フィルタ失敗作.jpg)
水彩画風フィルタの失敗作
ソースコードは下記。
C#。
フォームにボタンを3つ、ピクチャボックスを2つ置いて使用。
配置したボタンのボタン2とボタン3で画像をピクチャボックスに表示してから、実行。
単なる試作品の上に失敗作。




using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.Drawing;  
public delegate void ExampleCallback(Bitmap outBit, PictureBox p1);

namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        int tc = 0;
        //Bitmap lastB;
        public Form1()
        {
            InitializeComponent();

        }

        private void Form1_Load(object sender, EventArgs e)
        {
            pictureBox2.Image = Image.FromFile("D:/色々/中高生向け戦争小説 ギガンダム討伐/tumblr_l0771pDcX01qbq8jdo1_500.jpg");
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Bitmap b2 = new Bitmap(pictureBox1.Image);
            Bitmap b1 = new Bitmap (pictureBox1.Image); 
            pictFilter PTC1 = new WindowsFormsApplication2.pictFilter();
            //pictureBox1.Image=PTC1.HSVColorRound(b1, 30); 
            
            //pictureBox2.Image =PTC1.Laplacian2(b1,  PTC1.Laplacian(3,  PTC1.GrayImage(b1)));
            pictureBox2.Image =  PTC1.Laplacian(3, PTC1.GrayImage(b2));
            pictureBox2.Image = PTC1.Laplacian2 (b1,b2) ;

        }
        public static void ResultCallback(Bitmap outBit, PictureBox p1)
        {
            p1.Image = outBit;

        }


        private void pictureBox1_Click(object sender, EventArgs e)
        {
            tc++;
            pictureBox1.Top = 0;
            pictureBox1.Left = 0;

        }

        private void button2_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Filter = "画像ファイル(*.jpeg;*.jpg;*.gif)|*.jpeg;*.jpg;*.gif|すべてのファイル(*.*)|*.*";
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                pictureBox2.Image = Image.FromFile(ofd.FileName); 
            }
        }

        private void button3_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Filter = "画像ファイル(*.jpeg;*.jpg;*.gif)|*.jpeg;*.jpg;*.gif|すべてのファイル(*.*)|*.*";
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                pictureBox1.Image = Image.FromFile(ofd.FileName);
            }
        }

    }
    class pictFilter
    {




        public Bitmap HSVColorRound(Bitmap b1, int r)
        {
            Color C1;
            String s;
            Bitmap b2 = new Bitmap(b1.Width, b1.Height);
            HSV HSV1;
            double d;
            double MaxS=0;
            double d2=0;
            for (int i = 0; i < b1.Width; i++)
            {
                for (int j = 0; j < b1.Height; j++)
                {
                    C1 = b1.GetPixel(i, j);
                    HSV1 = HSVConvert.RGB2HSV(C1);

                    //d = (double)(HSV1.H + r) / 360.0;
                    //HSV1.H =(int) Math.Round (d*(1-d)*4.0*360.0) % 360;
                    //HSV1.H =( HSV1.H +r) % 360;
                    HSV1.H = (HSV1.H + r) % 360;
                    //d2=HSV1.S/255.0;
                    //HSV1.S = (int)Math.Floor(d2 * (1.0 - d2) * 4.0 * 255.0);
                    //HSV1.S /= 2;

                    //s = HSV1.ToString();
                    b2.SetPixel(i, j, HSVConvert.HSV2RGB(HSV1.H, HSV1.S, HSV1.V));
                }
            }
            return b2;
        }
        
        
        
        
        
        public Bitmap Laplacian2(Bitmap bBitmap,Bitmap b2)
        {

            int i, j;
            double count;
            int tempR;
            int tempG;
            int tempB;
            double tempR2, tempG2, tempB2;
            double tempRGB;
            Color C1, C2,C3;
            Bitmap b3=new Bitmap (bBitmap.Width ,bBitmap.Height);
            // 変数の宣言 iFilter : ラプラシアンフィルタ




            // 画像に対するフィルタ処理
            int size=4;
            int size2 = (2 * size + 1) * (2 * size + 1);
            double hiritu;
            double a;
            for (i = size; i < b2.Width - size; i++)
            {

                for (j = size; j < b2.Height - size; j++)
                {
                    count = 0;
                    for (int k = -size; k < size+1; k++)
                    {

                        for (int l = -size; l < size+1; l++)
                        {
                            tempR = b2.GetPixel(i + k, j + l).R;
                            if (tempR > 128)
                            {
                                count++;
                            }
                        }
                    }
                    /*
                    
                    a= (size2 - count) / (size2 * (size2 - 1));
                    tempR2 =tempG2 =tempB2 = 0;
                    hiritu = count / size2;
                    double b=a*(size2-1) + hiritu;
                    for (int k = -size; k < size+1; k++)
                    {

                        for (int l = -size; l < size+1; l++)
                        {
                            C3 = bBitmap.GetPixel(i + k, j + l);
                            if (k == 0 && l == 0)
                            {
                                tempR2 += (double)C3.R * hiritu ;
                                tempG2 += (double)C3.G * hiritu ;
                                tempB2 += (double)C3.B * hiritu;
                            }
                            else
                            {
                                tempR2 += (double)C3.R * a;
                                tempG2 += (double)C3.G * a;
                                tempB2 += (double)C3.B * a;
                            }

                        }
                    }
                    tempR =(int)Math.Floor ( tempR2);
                    tempG =(int) Math.Floor(tempG2);
                    tempB = (int)Math.Floor(tempB2);
 
                    C3 = Color.FromArgb(tempR, tempG, tempB);
                    b3.SetPixel(i, j, C3);
                    */
                    
                    
                    tempRGB=Math.Pow ((count) / ((2*size+1)*(2*size+1)),2);
                    // フィルタ処理
                    C1 = bBitmap.GetPixel(i, j);
                    C2 = b2.GetPixel(i, j);

                    tempR = (int)(Math.Floor(CutNum((double)C1.R * (1 - tempRGB ) + (double)255 *  tempRGB)));
                    tempG = (int)(Math.Floor(CutNum((double)C1.G * (1 - tempRGB ) + (double)255  * tempRGB)));
                    tempB = (int)(Math.Floor(CutNum((double)C1.B * (1 - tempRGB ) + (double)255  * tempRGB)));
                 
                    
                    C3=Color.FromArgb(tempR, tempG, tempB);
                    b3.SetPixel(i, j, C3);
                    

                }
            }
            // フィルタ処理の結果の出力
            return b3;
            //pictureBox1.Image = bBitmap;    // 変更結果の設定

        }







        private double CutNum(double x){
            if (x > 255)
            {
                x = 255;
            }
            if (x < 0)
            {
                x = 0;
            }
            return x;
        }






        public Bitmap Laplacian(int iAmp,Bitmap  bBitmap)
            
{

    int        i, j, iColorValue;    // 変数の宣言 iColorValue : RGB平均値

    // 変数の宣言 iFilter : ラプラシアンフィルタ

    int[]    iFilter = new int[]{-1, -1, -1, -1, 8, -1, -1, -1, -1};

    // 変数の宣言 iArrayValue : ピクセル色情報の配列        

    int[,] iArrayValue = new int[bBitmap.Width, bBitmap.Height];

    Color[]    cArrayColor = new Color[9];    // 変数の宣言 cArrayColor : 色情報の配列

    Color    cSetColor;        // 変数の宣言 cSetColor   : 設定する色

    // 画像に対するフィルタ処理

    for(i = 1; i < bBitmap.Width - 1; i++)

        for(j = 1; j < bBitmap.Height - 1; j++)

        {
            for(int k=-1;k<2;k++){
                for(int l=-1;l<2;l++){
                    cArrayColor[(k + 1) * 3 + l + 1] = bBitmap.GetPixel(i+k,j+l);
                }
            }
            // フィルタ処理

iColorValue = 

iFilter[0]*cArrayColor[0].R + iFilter[1]*cArrayColor[1].R +

iFilter[2]*cArrayColor[2].R  + iFilter[3]*cArrayColor[3].R + 

iFilter[4]*cArrayColor[4].R + iFilter[5]*cArrayColor[5].R + 

iFilter[6]*cArrayColor[6].R + iFilter[7]*cArrayColor[7].R + 

iFilter[8]*cArrayColor[8].R;

            iColorValue = iAmp*iColorValue;    // 出力レベルの設定

            // iColorValue が負の場合

            if(iColorValue < 0)

                iColorValue = -iColorValue;    // 正の値に変換

            // iColorValueが255より大きい場合

            if(iColorValue > 255)

                iColorValue = 255;    // iColorValue を 255 に設定

            iArrayValue[i, j] = iColorValue;// iColorValue の設定

        }

    // フィルタ処理の結果の出力

    for (i = 1; i < bBitmap.Width - 1; i++)

        for (j = 1; j < bBitmap.Height - 1; j++)

{

// iArrayValue 値による色の設定

cSetColor = Color.FromArgb(iArrayValue[i, j],

iArrayValue[i, j],iArrayValue[i, j]);

// ピクセルの色の設定

bBitmap.SetPixel(i, j, cSetColor);

}
    return bBitmap; 
    //pictureBox1.Image = bBitmap;    // 変更結果の設定

}




        public   Bitmap GrayImage (Bitmap  bBitmap)

{

    int iRed, iBlue, iGreen;
    int iAverage;
    Color cSetColor;
    Color cColor;


    // 画像のグレースケールへの変換

    for (int i = 0; i < bBitmap.Width; i++)

        for (int j = 0; j < bBitmap.Height; j++)
        {    

            cColor = bBitmap.GetPixel(i, j);    // ピクセルの色の取得

            iRed = cColor.R;            // Red 値の設定

            iBlue = cColor.B;            // Blue 値の設定

            iGreen = cColor.G;            // Green 値の設定

            iAverage = (iRed + iBlue + iGreen) / 3;// RGB の平均値を算出

            // iAverage 値による色の設定

            cSetColor = Color.FromArgb(iAverage, iAverage, iAverage);

            bBitmap.SetPixel(i, j, cSetColor);    // ピクセルの色の設定

        }
    return bBitmap;
    //pictureBox1.Image = bBitmap;    // 変更結果の設定
}












        struct HSV
        {
            public int H;
            public int S;
            public int V;
        }

        class HSVConvert
        {
            //RGBをHSVに変換  
            public static HSV RGB2HSV(Color RGB)
            {
                HSV hsv = new HSV();

                double max = Math.Max(Math.Max(RGB.R, RGB.G), RGB.B);
                double min = Math.Min(Math.Min(RGB.R, RGB.G), RGB.B);

                //Vを求める  
                hsv.V = (int)max;

                //RGBすべてが同じ場合 HとSは0     
                if (max == min)
                {
                    hsv.H = 0;
                    hsv.S = 0;
                }
                else
                {
                    //Sを求める  
                    hsv.S = (int)(((max - min) * 255) / max);

                    //Hを求める  
                    hsv.H = 0;

                    if (max == RGB.R)
                    {
                        hsv.H = (int)(60 * (RGB.G - RGB.B) / (max - min));
                        if (hsv.H < 0) hsv.H += 360;
                    }
                    else if (max == RGB.G)
                    {
                        hsv.H = (int)(60 * (2 + (RGB.B - RGB.R) / (max - min)));
                        if (hsv.H < 0) hsv.H += 360;
                    }
                    else if (max == RGB.B)
                    {
                        hsv.H = (int)(60 * (4 + (RGB.R - RGB.G) / (max - min)));
                        if (hsv.H < 0) hsv.H += 360;
                    }
                }


                return hsv;
            }

            //HSVをRGBに変換  
            public static Color HSV2RGB(int H, int S, int V)
            {

                if (H == 360) H = 0;
                int Hi = (int)Math.Floor((double)H / 60) % 6;

                float f = ((float)H / 60) - Hi;
                float p = ((float)V / 255) * (1 - ((float)S / 255));
                float q = ((float)V / 255) * (1 - f * ((float)S / 255));
                float t = ((float)V / 255) * (1 - (1 - f) * ((float)S / 255));

                p *= 255;
                q *= 255;
                t *= 255;

                Color rgb = new Color();

                switch (Hi)
                {
                    case 0:
                        rgb = Color.FromArgb(V, (int)t, (int)p);
                        break;
                    case 1:
                        rgb = Color.FromArgb((int)q, V, (int)p);
                        break;
                    case 2:
                        rgb = Color.FromArgb((int)p, V, (int)t);
                        break;
                    case 3:
                        rgb = Color.FromArgb((int)p, (int)q, V);
                        break;
                    case 4:
                        rgb = Color.FromArgb((int)t, (int)p, V);
                        break;
                    case 5:
                        rgb = Color.FromArgb(V, (int)p, (int)q);
                        break;
                }


                return rgb;
            }
        }
    }
}















*2010/10/1
歩兵FPSゲーム初心者教習講座Madムービー企画書 Ver企画書試作品。


BGM クラシック
語り口調 礼儀作法や研修用ビデオのノリで作る



1
学校で習いましたね。
道路を横切るときは必ず左右確認忘れずに。
道路に限らず開けた場所は、絶好のスナイプポイント。
運を天にまかして開けた場所に出るのは、道路の左右確認もしないで道に飛び出すのと同じ。
よく注意しましょう。
ナレーションは、道路を渡るときは左右を確認しましょうという小学生向けの道路安全講座風味のノリで。



2
建物に入るとき、出来るだけ手榴弾や閃光弾を投げ入れれましょう。
それが戦場での礼儀です。
(ナレーションや文章は礼儀作法のビデオのノリで)


3
狙撃地点への通り道は格好の待ち伏せ場所。
狙撃地点へ向かう敵のルートを予想し逆に待ち伏せするのが吉。
ナレーションは客をキャッチセールスするとき、客をどう捕まえるかの研修用ビデオ風味のノリで


4
戦車、乗り物の操縦方法
(車の教習講座風味のノリでナレーションを入れる)


5
茂みやヘコミは、敵の来る方向が制限される安全地帯。
むやみに動かず凹みに隠れへこみの前を敵が通るのを待つのはとても良い選択です。
(ナレーションは)



以下このノリで展開される初心者向けMAD映像を作りたい。

-目標
内容がくだらないので目標1000アクセス越え程度を目指す。














*2010/10/1
今日の嘘日記。
人口200万を数える県庁所在地加古川。
加古川では最近複合コンビニが増えている。

回転寿司がコンビニの中央に鎮座し、壁際に商品だなが置かれている回転寿司コンビニ。
漫画喫茶に近い、雑誌を座って読めるコーナーのアルコンビニ。
商品だなは畳張り、壁際は障子に和格子、天蓋には手水に日本庭園のミニチュアが置かれた完全和風の店内。
オーナーの趣味、店内をジオラマつき鉄道模型が走り回るジオラマコンビニ。
ハイテク完全自動、アシモ6号量産型の働く全自動コンビニ。
店員が全員メイドコスプレのメイドコンビニ。
熱血店長が君に熱血魂を注入してくれる熱血コンビニ。
コンビニ激戦区加古川では多種多様なコンセプトのコンビニが生まれては消えている。


そのほかに
怪奇現象と心霊現象多発、店員はヴァンパイアとの噂のあるホラーコンビニ。
謎の大手、異世界に出張所を持ち異世界の技術で作られた品があるロー○ソンコンビニ。
魔法使い向け商品最大手の経営する、魔術商品充実の魔法コンビニ。
異世界への入り口が開いていて国境機能バリケードのある、異世界コンビニ、異世界の商品を無税で買える。
契約済み地獄の魔物を店員として働かさせている。

などがあり、コンビには加古川の一大観光産業を形成している。




-嘘日記2
加古川のタクシーは過激だ。
スポーツカー使用、ごてごて飾り立てた暴走族使用、警察とのカーチェイスは日常茶飯事。
客を一分一秒でも早く送り届けるために、交通マナーは最悪。
込んでる日には歩道を走る車があるほどだ。

復元してよろしいですか?