我擁有用於在手持設備上保存用戶簽名的應用程序的一部分。 我已經設法通過一個包含「點」陣列列表的「Lines」的數組列表來完成此操作。 我需要將這些信息存儲在SQL數據庫中。我見過的唯一信息就是使用圖像數據類型並將其傳遞給一個字節數組。有問題。我會怎麼做,或者有更好的方法?將點的ArrayList轉換爲字節數組以存儲在SQL數據庫中
回答
如果將此數據轉換爲圖像,某些信息(哪一點屬於哪一行)會丟失。如果你想保留這些信息,你應該序列化你的數據。
決定的格式:你可以使用一些非常詳細,如XML ...
<Line>
<Point X="3" Y="4" />
<Point X="3" Y="5" />
...
</Line>
<Line>
<Point X="10" Y="10" />
...
</Line>
...
...或者一些基於文本的自定義格式:
3,4-3,5-...;10,10-...;...
當然,您將以最高效的方式將數據存儲在某種二進制編碼中。
如果您使用基於文本(或XML)的格式,則您的序列化將產生一個字符串,您可以將其存儲在SQL Server的varchar(MAX)
或text
字段中。如果您決定使用二進制編碼,則序列化將生成一個字節數組。爲此,varbinary(MAX)
或image
是選擇的數據類型。請注意,名稱image
可能會引起誤解:這並不是而是必然意味着您的數據被編碼爲「圖像」(jpeg,png等)。
執行:對於XML和標準二進制編碼,.NET提供了內置函數。這裏的介紹和鏈接演練的MSDN:
如果你決定在一些自定義的基於文本或自定義的二進制編碼,你需要自己編寫序列化和反序列化部分。如果你需要幫助,你需要提供更多的信息:你的數據結構是如何精確的?你的X和Y座標是什麼數據類型?
因此,您讓用戶通過使用手寫筆簽名來創建位圖圖形? 聲音對我來說是完全合理的把它作爲圖像存儲。
這聽起來像你想要某種形式的二進制序列化的;這裏是一個使用protobuf網一個工作版本(注意,我改變ArrayList
到List<T>
):
using System.Collections.Generic;
using System.IO;
using ProtoBuf;
[ProtoContract]
class Line
{
private readonly List<Point> points = new List<Point>();
[ProtoMember(1, DataFormat = DataFormat.Group)]
public List<Point> Points { get { return points; } }
}
[ProtoContract]
class Point
{
[ProtoMember(1)]
public int X { get; set; }
[ProtoMember(2)]
public int Y { get; set; }
}
static class Program
{
static void Main()
{
var lines = new List<Line> {
new Line { Points = {
new Point { X = 1, Y = 2}
}},
new Line { Points = {
new Point { X = 3, Y = 4},
new Point { X = 5, Y = 6}
}},
};
byte[] raw;
// serialize
using (var ms = new MemoryStream())
{
Serializer.Serialize(ms, lines);
raw = ms.ToArray();
}
List<Line> clone;
// deserialize
using (var ms = new MemoryStream(raw))
{
clone = Serializer.Deserialize<List<Line>>(ms);
}
}
}
只需要從您的資料黑白位圖,然後使用.NET庫中的位圖轉換爲PNG圖像:
MemoryStream pngbuffer = new MemoryStream();
Bitmap.Save(pngbuffer,ImageFormat.Png)
並將其作爲二進制數據存儲。大多數數據庫都有用於存儲二進制數據的格式:PostgreSQL bytea,MySQL和Oracle blob,MSSQL圖像等。
爲什麼要轉換爲`PNG`? – Brad 2010-11-23 16:14:34
- 1. 將存儲爲文本的數據轉換爲數字(Oracle SQL)
- 2. 將ArrayList轉換爲數組
- 3. 將arraylist的arraylist轉換爲數組?
- 4. 將SQLite數據庫轉換爲Java Arraylist
- 5. 將SQL數據庫的值轉換爲字符串數組
- 6. 轉換字節數組的字節位和存儲在整數數組
- 7. 如何將圖像轉換爲字節以將其保存在數據庫中並從數據庫中檢索?
- 8. 使用函數將圖像轉換爲字節數組並存儲在postgresql中
- 9. 將圖像轉換爲字節以便在數據庫中保存時出錯
- 10. 將byte []數組轉換爲字節數
- 11. 將大型SQL Server數據庫轉換爲Azure存儲
- 12. 將字符串數組(字節值)轉換爲字節數組
- 13. 如何將python數組轉換爲JSON字符串,以便它可以存儲在數據庫中?
- 14. 如何將浮點數組轉換爲字節數組?
- 15. 使用LINQ to SQL存儲圖像:將字節數組或流轉換爲Binary
- 16. 將數組存儲在數據庫中
- 17. 如何將字符串中存儲的數據轉換爲字符串數組
- 18. 如何在線存儲轉換爲sql的訪問數據庫
- 19. 將字節數組轉換爲字符串的字節數
- 20. C# - WinRT - 將存儲爲字節數組的IPv6地址轉換爲字符串
- 21. 將Java字節數組轉換爲Python字節數組
- 22. 將PNG壓縮字節數組轉換爲BMP字節數組
- 23. 將三維字節數組轉換爲單字節數組
- 24. 如何將Java字節數組轉換爲Scala字節數組?
- 25. 將SQL數據庫轉換爲.sql
- 26. 將SQL Azure轉換爲SQL數據庫
- 27. 將內存中的sqlite數據庫轉換爲char數組
- 28. 將內存中的sqlite數據庫轉換爲blob/char數組
- 29. C#:將字節數組存儲爲XML
- 30. 我必須在sqlite數據庫中存儲字節數組
我試圖將其保存爲圖像。這就是問題所在。我可以看到保存它的唯一方法是作爲「圖像」數據類型,它需要一個字節數組。我沒有一個字節數組,我有一個xy點的負載 – MichaelMcCabe 2010-11-23 09:53:14
好吧,我以爲你會從一個位圖開始,並從位圖獲取點列表。那麼,如果有疑問:相信馬克Gravell :) – 2010-11-24 17:04:26