2016-09-15 2 views
0

Der Code funktioniert auf dem Tutorial, das ich aber nicht auf meinem gesehen habe. Hier ist mein Code:C# Kann Byte nicht in Bild konvertieren

private void AddButton() 
{   
    foreach (TblProductType category in cse.TblProductType) 
    { 
     Button btn = new Button(); 
     btn.Text = category.Description; 
     btn.Size = new Size(100, 100); 
     btn.ForeColor = Color.White; 

     byte [] dataCategory1 = category.Productimage; 
     MemoryStream stm = new MemoryStream(dataCategory1); 
     btn.Image = Image.FromStream(stm); 
     btn.Image = ResizeImage(btn.Image, btn.Size); 

     btn.Tag = category.ProductTypes; 
     flow1.Controls.Add(btn); 
     this.Controls.Add(flow1); 
     btn.Click += btn_Click 
    } 
} 
+3

Hey Samuel und willkommen bei StackOverflow. Sie sollten uns ein wenig mehr Informationen über das Problem geben, etwa wenn es sich um einen Syntaxfehler handelt oder wenn das Bild einfach nicht erstellt wird. –

+0

Bitte teilen Sie den Code für ResizeImage –

+0

_Doesn't work_ ist keine hilfreiche Problembeschreibung! – TaW

Antwort

0

Wir können ein wenig mehr umgebenden Code benötigen, oder weitere Informationen auf die genaue Art des Problems, aber ich vermute, dass die wahrscheinlichste Ursache für dieses Problem ist, was in ResizeImage geschieht.

Hier ist eine Funktion, die Größe System.Drawing.Image, vielleicht geben Sie einen Versuch und sehen, ob es Ihr Problem behebt?

public static Image ResizeImage(int newWidth, int newHeight, Image image) { 

     int sourceWidth = image.Width; 
     int sourceHeight = image.Height; 

     //Consider vertical pics 
     if (sourceWidth < sourceHeight) { 
      int buff = newWidth; 

      newWidth = newHeight; 
      newHeight = buff; 
     } 

     int sourceX = 0, sourceY = 0, destX = 0, destY = 0; 
     float percent = 0, percentW = 0, percentH = 0; 

     percentW = ((float)newWidth/(float)sourceWidth); 
     percentH = ((float)newHeight/(float)sourceHeight); 
     if (percentH < percentW) { 
      percent = percentH; 
      destX = System.Convert.ToInt16((newWidth - 
         (sourceWidth * percent))/2); 
     } else { 
      percent = percentW; 
      destY = System.Convert.ToInt16((newHeight - 
         (sourceHeight * percent))/2); 
     } 

     int destWidth = (int)(sourceWidth * percent); 
     int destHeight = (int)(sourceHeight * percent); 


     Bitmap bitmap = new Bitmap(newWidth, newHeight, 
         PixelFormat.Format24bppRgb); 

     bitmap.SetResolution(image.HorizontalResolution, 
        image.VerticalResolution); 

     Graphics graphic = Graphics.FromImage(bitmap); 
     graphic.Clear(Color.Black); 
     graphic.InterpolationMode = 
      System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; 

     graphic.DrawImage(image, 
      new Rectangle(destX, destY, destWidth, destHeight), 
      new Rectangle(sourceX, sourceY, sourceWidth, sourceHeight), 
      GraphicsUnit.Pixel); 

     graphic.Dispose(); 
     image.Dispose(); 
     return bitmap; 
    } 
0

Hier versuchen Sie dies: In meinem Problem gespeichert Ich meine Grafik zu einem Memory .. gespeichert dann das Memory Array Byte und dann Byte-Array auf ein Bild gespeichert. Für mich geht das.

using (MemoryStream memoryStream = new MemoryStream()) 
     { 
      //saved my chart to an memoryStream 
      Chart2.SaveImage(memoryStream, ChartImageFormat.Png); 

      //saved memorystream to byte array 
      byte[] byteArrayIn = memoryStream.ToArray(); 

      //saving byte back to an Image 
      Image image1 = new Image(); 
      image1.ImageUrl = "data:image/png;base64," + Convert.ToBase64String(byteArrayIn, 0, byteArrayIn.Length); 

      newChart.Controls.Add(image1); 
      divRadarChart.Visible = false; 
     } 
Verwandte Themen