FC2カウンター

現在の訪問者数

現在の閲覧者数:

カレンダー

03 | 2017/04 | 05
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 - - - - - -

プロフィール

剣菱P

Author:剣菱P
剣菱Pと申します。
性別:男
年齢:27
二兎を追って一兎も得られないタイプ

マイコンやプログラミング、ニコニコ動画、雑記等
方向性は見えずとも、ちょっとずつ更新していく予定です!

リンクフリーです。
こんなブログでよかったらよろしくお願いしま~す。

公開メール kenbishiP@gmail.com

検索フォーム

最新記事

最新コメント

カテゴリ

メールフォーム

名前:
メール:
件名:
本文:

月別アーカイブ

最新トラックバック

リンク

ブロとも一覧

ブロとも申請フォーム

ランキング

ランキング参加中です。気が向いたらクリックしてあげてください。


にほんブログ村 その他趣味ブログへ
にほんブログ村 その他趣味ブログ 趣味の工作へ

スポンサーサイト


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


C# ファイルを開く


C#でファイルを開く方法 自分用メモ


using System.IO;

private void button2_Click(object sender, EventArgs e)
{
   string fname;
   OpenFileDialog ofd = new OpenFileDialog();

   ofd.InitialDirectory = @"C:\"; //最初のディレクトリ
   ofd.Filter = "CSVファイル|*.csv";
   ofd.FilterIndex = 1;
   ofd.Title = "CSVファイルを選択してください。";
   ofd.RestoreDirectory = true;
   ofd.CheckFileExists = true;
   ofd.CheckPathExists = true;

   if (ofd.ShowDialog() == DialogResult.OK)
   {
    fname = ofd.FileName; //ファイル名とパスを取得
    textBox1.Text = Path.GetFileName(fname);
    textBox2.Text = Path.GetDirectoryName(ofd.FileName);
   }
}

20120823_225437.jpg

スポンサーサイト

インスタンスとnew


C#でネットワークプログラムの勉強を再開


そもそもC#の理解がまだいまいちだけど、ちょっとづつオブジェクト指向ってものがわかってきた気がする


今日は1つ疑問がうまれた

参考書を読んでいると

IPEndPoint localEP = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8888);
TcpListener listener = new TcpListener(localEP);

TcpClient client = listener.AcceptTcpClient();

NetworkStream netStream = client.GetStream();
StreamReader sr = new StreamReader(netStream, Encoding.UTF8);

こんな感じでクラスからインスタンスを作っている文がある

インスタンスって物は少しだけ理解してきた

クラスで定義されている設計図を素に 実際にメモリにその設計図どおりに作られるのがインスタンス

であってますよね?

で、そのインスタンスを作るためには クラスの型を指定して newをしなきゃいけない

ついでに言うと そのときにコンストラクタという初期化専用のメソッドを指定できる

というところまではなんとなく理解

ただ、new を使うところと使ってないところがある

TcpListener listener = new TcpListener(localEP);

TcpClient client = listener.AcceptTcpClient();

これとか

AcceptTcpClientメソッドを調べてみると データ送受信用のTcpClientオブジェクトを戻すと書いてある


つまり
TcpListener listener = new TcpListener(localEP);

この行で listnerというTcpListener型のインスタンスを作って メモリ上にこれを配置して

その中にデータ送受信用のオブジェクトがすでにあって そのアドレスを

TcpClient client = listener.AcceptTcpClient();

これで clientって名前にさせてもらってるだけで 新たにメモリ上にスペースを確保するわけではないから

newはいらないって事なのかな?

この考えであってそうな気がするな 厳密なところは微妙に違うかもだけど…


戻り値にオブジェクトを返してくるメソッドを使って インスタンスを作るときは

新しくメモリを確保するわけじゃないからnewはいらない

いわゆる 動的にメモリを確保するならnewが必要ってことかな?

ってことでとりあえず理解したことにしておこう…

間違いならいつか気がつくだろう



さぼりすぎた…


C#の勉強サボりすぎて 完全に使い方忘れてしまっているw

勉強途中でまだ理解が浅い上体で間をあけちゃったからもう完全にリセットされている

自分が過去に書いた記事でちょっとずつ思い出せるかな

やっぱブログに残しておいて正解だったかな


これからまたがんばらねば


いやな予感的中w


いやぁ、まったくいくつ壁を越えればいいんですかねぇ

本職のプログラマーさんって完全にドMですよねw

画像送信プログラムですが、同じPC上にサーバーとクライアントを起動した場合はすんなりうまく行っていたんですが


ちょっとためしに別々のPCで起動したら やっぱりエラーでましたww

ちくしょーww


エラーメッセージを見ると ストリームを超えて読み込むことは出来ない

そう仰っております

試しにデータを格納するプロセスを見てみると
201005246.jpg
配列は14747個準備したのに 13730番でストップしてる

201005247.jpg

中身を確認してみても13730以降は全て0

送信したデータをバイナリエディタで確認し 配列の最後の方と照合してみました

201005248.jpg

b[13725] = 87 = 57
b[13726] = 34 = 22
b[13727] = 199 = C7
b[13728] = 255 = FF
b[13729] = 217 = D9

うん、完全に一致

つまりストリームの初めの方を取りこぼしてるって事か

やはりなんかやな予感はしてたんですよね 根本的に送信方法を変えなくてはならないな


openCVsharpを利用


結局なにがいけないのか良くわからなかったので

openCVのラッパーを使います

うぅぅぅ、逃げてばっかりですね自分 これじゃ成長しないなぁ

つってもとりあえず目標に近づくためにルート、手段は問わないのが自分のやり方なので

結果がおkならおk!! (とごまかしつつ)

今回はopenCVsharpというラッパーのお世話になることにしました

まぁ、ラッパーってのがいまいちよくわかってないのはおいておいてw

これを使うとC#でもopenCVが使えるということらしいです

早速使ってみました

必要なdllなどは手動でソリューションエクスプローラに参照させました

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 OpenCvSharp;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        IplImage img;
        CvCapture src;

        private void Form1_Load(object sender, EventArgs e)
        {
            src = CvCapture.FromCamera(0);
            img = Cv.QueryFrame(src);

            timer1.Interval = 33;
            timer1.Start();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            img = Cv.QueryFrame(src);
            Bitmap bmp = new Bitmap(img.Width, img.Height, img.WidthStep, System.Drawing.Imaging.PixelFormat.Format24bppRgb, img.ImageData);
            pictureBox1.Image = bmp;
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            Cv.ReleaseCapture(src);
        }
    }
}


201005245.jpg
無事に成功!!

ピンボケはカメラの仕様w



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