2016-03-30 6 views
0

非常に簡単なプロジェクトを作成しています。C#画像をBLOBに変換し、結果をテキストボックスに保存する

(1)が必要です。ユーザーがイメージファイルを選択し、BLOBとしてデータベースに格納できる形式に変換できるようにします。

(2)。 BLOBデータをテキストボックスに出力します。

(3)。ボックスに出力されたテキストは、データベースに格納してからイメージに変換することができる必要があります(この変換は別の場所で処理されます)。

このアプリケーションはここでは最初の変換to BLOB)を使用してイメージをSQLデータベースに挿入することができますが、プログラムを実行するたびにファイルを開こうとするとフリーズすることがあります。私がやろうとしています?

感謝をずっと!

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Data; 
using System.Windows.Documents; 
using System.Windows.Input; 
using System.Windows.Media; 
using System.Windows.Media.Imaging; 
using System.Windows.Navigation; 
using System.Windows.Shapes; 
using System.Windows.Controls; 
using System.Windows.Forms; 
using System.IO; 

namespace Binary_Converter 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 
     private OpenFileDialog imageDialog = new OpenFileDialog(); 
     private FileStream imageStream; 
     public MainWindow() 
     { 


      InitializeComponent(); 
       imageDialog.InitialDirectory = "c://"; 
      imageDialog.Filter = "Image Files | *.jpg; *.gif; *.png"; 

      imageDialog.FileOk += imageDialog_FileOk; 

     } 



     private void UI_Loaded(object sender, RoutedEventArgs e) 
     {} 




void imageDialog_FileOk(object sender, System.ComponentModel.CancelEventArgs e) 
{ 
    if((imageStream = (FileStream)imageDialog.OpenFile()) != null) { 
     byte[] buffer; 
    using(imageStream) { 
    buffer = new byte[imageStream.Length]; 


     imageStream.Read(buffer, 0, (int)imageStream.Length);  



    } 
     foreach(byte i in buffer) { 
      outputText.Text += buffer[i]; 
     } 
    } 

} 

     private void addFileButton_Click(object sender, RoutedEventArgs e) 
     { 
      imageDialog.ShowDialog(); 

     } 
     } 

    } 

答えて

0

I あなたが値を16進形式に変換していないので、プログラムがフリーズすると考えてください。生のバイト値を出力しようとしていますが、制御文字を含む文字列として解釈するので、テキストボックスを "害する"でしょう。値をデータベースに挿入する場合は、16進形式が必要です。

foreach(byte i in buffer) { 
    outputText.Text += buffer[i]; 
} 

outputText.Text = "0x"; // begin the string with 0x to tell that it is hexadecimal 
foreach(byte i in buffer) { 
    outputText.Text += buffer[i].ToString("x2"); // convert each byte to hexadecimal form 
}