Można na dwa sposoby.
Pierwszy sposób polega na skopiowaniu z bazy hex stringu i wstawienie go do DrawImage(), który później za pomocą HexStringToBytes() jest konwertowany do byte[].
public void DrawImage(string hexvalue)
{
canvas1.Children.Clear();
byte[] byBitmap = HexStringToBytes(hexvalue);
Drugim sposobem jest połączenie się do bazy MSSQL z poziomu programu i wykonanie odpowiednich zapytań, aby odnieść się do komórki z naszym obrazkiem, tzw. Binary Data.
Tutaj już nie korzystamy z HexStringToBytes(), tylko po odpowiednim zapytaniu odwołujemy się do kolumny "pic", gdzie jest zapisany obrazek.
public void DrawImage()
{
//Połączenie z bazą + zapytanie
canvas1.Children.Clear();
byte[] byBitmap = (byte[])result["pic"];
Poniższy przykład przedstawia narysowanie obrazku w canvas z hexstringu.
public void DrawImage(string hexvalue)
{
canvas1.Children.Clear();
byte[] byBitmap = HexStringToBytes(hexvalue);
var Bitmap = ImageFromBuffer(byBitmap);
Image NewImg = new Image();
double maxX = canvas1.Width = Bitmap.Width;
double maxY = canvas1.Height = Bitmap.Height;
NewImg = new Image();
NewImg.Source = Bitmap;
NewImg.Width = Bitmap.Width;
NewImg.Height = Bitmap.Height;
Canvas.SetLeft(NewImg, 0);
Canvas.SetTop(NewImg, 0);
canvas1.Children.Add(NewImg);
}
public BitmapImage ImageFromBuffer(Byte[] bytes)
{
MemoryStream stream = new MemoryStream(bytes);
BitmapImage image = new BitmapImage();
image.BeginInit();
image.StreamSource = stream;
image.EndInit();
return image;
}
byte[] HexStringToBytes(string hex)
{
return Enumerable.Range(0, hex.Length)
.Where(x => x % 2 == 0)
.Select(x => Convert.ToByte(hex.Substring(x, 2), 16))
.ToArray();
}
Brak komentarzy:
Prześlij komentarz