2011-10-29 15 views
0

所以我寫了我的刮刀,並通過一個C#類(卡)到IronPython的,它然後愉快地裝載了什麼,我認爲是二值圖像數據轉換成byte[]像這樣:抓取與IronPython的,加載圖像在C#

imageurl = "http://blabla.com/Image.ashx?id=" + card.Id + "&type=card" 
imageresult = urllib2.urlopen(imageurl).read() 
if imageresult == '': 
    print 'Could not find image for ' + card.Title 
card.AddImage(imageresult) # AddImage(byte[]) 

然後我堅持這一點,從NHibernate的數據庫中把它和試圖與該把它拉回到我的MVC前端:

var ms = new MemoryStream(card.Image); 
var image = Image.FromStream(ms); // ***Parameter is not valid.*** 

如果我只是這樣寫出來的文件,而不是一個C#對象與Python,我很確定這會工作。我的問題是,是否有一種很好的方式來說明IronPython和CLR數據類型之間的轉換是什麼樣子的?我的二進制文件很糟糕,在這種情況下,我不確定該怎麼做。

回答

1

它看起來像byte[]不能被持久化。看看這個問題:

NHibernate MappingException: no persister for byte[]

這可能是因爲你沒有得到相同的消息,因爲它發生在IronPython的不是在C#中,由於C#的類型檢查。

這是一個被序列化byte[]爲ASCII另一個鏈接一個可能的解決方案:

http://guildsocial.web703.discountasp.net/dasblogce/2009/04/03/NHibernateMappingToBinaryData.aspx

下面是該職位的代碼段:

return new ASCIIEncoding().GetString(bytes); 

public static string ConvertByteArrayToString(byte[] bytes) 
{ 
    try 
    { 
     return new ASCIIEncoding().GetString(bytes); 
    } 
    catch (Exception) 
    { 
     return ""; 
    } 

} 
0

DrNewman一針見血基本的頭。問題在於它最終出現在鐵蟒中的字符串格式。我沒有在Python中將它轉換成正確的格式,而是用C#將它返回,我只是選擇將這部分交給C#。我最終做的是從Iron python調用AddImage,然後傳遞url。然後用C#做最後一步的刮(圖片)#