从DB加载后获取黑色图像

时间:2017-03-24 18:41:58

标签: c# mysql image winforms

经过一段时间的尝试并在这里寻找答案,我无法从MySQL加载图像。

基本上,用户从OpenFileDialog中选择一张图片,然后将其加载到PictureBox中(此工作正常)。
然后,用户单击一个按钮,通过将其转换为byte[]将图片保存在数据库中 最后,当我尝试将图片加载到另一个PictureBox时,它全部为黑色。

将图片添加到db:

public void PictureToDB(Image img)
{
    MemoryStream tmpStream = new MemoryStream();
    img.Save(tmpStream, ImageFormat.Png);
    tmpStream.Seek(0, SeekOrigin.Begin);
    byte[] imgBytes = new byte[5000];
    tmpStream.Read(imgBytes, 0, 5000);

    string query = "Update TABLE Set IMG = @imgBytes";
    MySqlParameter param = new MySqlParameter("@img", imgBytes);

    //Skipping connection to db and all... it works
}

从db获取图片:

public void DBToPicture()
{
    string query = "Select IMG From TABLE Where ...";
    //Skipping Command lines ...
    MySqlDataReader reader = command.ExecuteReader();
    DataTable myDT.Load(reader);

    Byte[] data = new Byte[0];
    data = (Byte[])(myDT.Rows[0]["PHOTOLOISANT"]);
    MemoryStream mem = new MemoryStream(data);
    MyPictureBox.Image = Image.FromStream(mem);
}

更多信息:

  • MySQL中的类型为varbinary(8000)并包含此" 89504e470d0a1a0a0000000d4948445200000280000001e00802000000bab34bb3000000017352474200aece1ce90000000467414d41002e2e2e"在update
  • 之后
  • 当图像在第一个PictureBox中加载时,图像将转换为位图。

1 个答案:

答案 0 :(得分:1)

用于存储:

CREATE INDEX part_name_trigram_i ON "Part" USING GIN("name" gin_trgm_ops);

要检索它:

var timer={

 init:function(id){
   this[id]={
   obj:document.getElementById(id)
  }
 },

 start:function(id){
    var obj=this[id];
    obj.srt=new Date();
    clearTimeout(obj.to);
    this.tick(id);
    $( "#climbTimer" ).unbind();
    $('#climbTimer').click(function(){timer.finalStop('climbTimer'); return false;});
    
    if ($('#'+id).html().indexOf('Start') != -1)
      $('#'+id).html('Stop Ascend<br><span id="elapsedTime">0.00</span>');
 },

 stop:function(id){
  	clearTimeout(this[id].to);
 },
 
 finalStop:function(id){
	 clearTimeout(this[id].to);
	 
	  $.post('php/climbTime.php', {team: document.getElementById('team').value, roundNum: document.getElementById('round').value, time: document.getElementById('elapsedTime')});
 },

 tick:function(id){
  this.stop(id);
  var obj=this[id],sec=(new Date()-obj.srt)/1000,min=Math.floor(sec/60),sec=sec%60;
  $('#elapsedTime').html(sec>9?sec:''+sec);
  obj.to=setTimeout(function(){ timer.tick(id); },100);
 }
 
	
}

我将使用这些步骤来存储和检索MySql中的图像。

此致

Thiyagu Rajendran

**如果答案有帮助,请将答复标记为答案,如果不答复,请将其标记为