2016-03-30 8 views
0

Ich arbeite an einem sehr einfachen Projekt (was hätte sein sollen). Es mussC# Bild in BLOB konvertieren und Ergebnis im Textfeld speichern

(1) sein. Erlaube einem Benutzer, eine Bilddatei auszuwählen und diese dann in ein Format umzuwandeln, das in einer Datenbank als ein BLOB gespeichert werden kann.

(2). Geben Sie die BLOB-Daten in ein Textfeld aus.

(3). Der Text, der in der Box ausgegeben wird, muss in der Lage sein, in einer Datenbank gespeichert und dann erfolgreich wieder in ein Bild konvertiert zu werden (diese Konvertierung wird an anderer Stelle bearbeitet.

Diese Anwendung hier soll nur die anfängliche Konvertierung durchführen (image zu BLOB), so dass der Benutzer das Bild in eine SQL-Datenbank einfügen kann.Jedoch "friert" es immer ein, wenn ich das Programm öffne.Was mache ich falsch? Gibt es einen effizienteren Ansatz, um was zu erreichen ich versuche zu tun?

Dank viel!

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(); 

     } 
     } 

    } 

Antwort

0

I Denken Sie, dass Ihr Programm friert, weil Sie die Werte nicht in Hexadezimalformat konvertiert haben. Sie versuchen, unformatierte Bytewerte auszugeben, und das Textfeld wird beschädigt, da es als Zeichenfolge mit Steuerzeichen interpretiert wird. Hexadezimales Format wird benötigt, wenn Sie den Wert in die Datenbank einfügen möchten.

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 
}