我拥有用于在手持设备上保存用户签名的应用程序的一部分。 我已经设法通过一个包含“点”阵列列表的“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. 将SQLite数据库转换为Java Arraylist
- 2. 将SQL数据库的值转换为字符串数组
- 3. 如何将图像转换为字节以将其保存在数据库中并从数据库中检索?
- 4. 使用函数将图像转换为字节数组并存储在postgresql中
- 5. 将图像转换为字节以便在数据库中保存时出错
- 6. 将字符串数组(字节值)转换为字节数组
- 7. 将大型SQL Server数据库转换为Azure存储
- 8. 使用LINQ to SQL存储图像:将字节数组或流转换为Binary
- 9. 如何将字符串中存储的数据转换为字符串数组
- 10. 在内存中将Word文档转换为pdf字节数组
- 11. 将PNG压缩字节数组转换为BMP字节数组
- 12. 将Java字节数组转换为Python字节数组
- 13. 如何将Java字节数组转换为Scala字节数组?
- 14. 将内存中的sqlite数据库转换为char数组
- 15. 将SQL Azure转换为SQL数据库
- 16. 将SQL数据库转换为.sql
- 17. C#:将字节数组存储为XML
- 18. 在HTML5 sqlite数据库中存储字节数组
- 19. 在对象中存储字节数组,然后将其转换为ObjectOutputStream? (卡住)
- 20. 将字节数组从服务器转换为图像并存储在SQLITE数据库--OBJECTIVE C
- 21. 如何将内存中的文件转换为字节数组?
- 22. 将字符串数组转换为Arraylist的ArrayList
- 23. 将证书转换为字节数组
- 24. 将int转换为字节数组BufferOverflowException
- 25. 将图像转换为字节数组?
- 26. VB.Net将字节数组转换为SQLBinary
- 27. 将字节数组转换为texture2D XNA
- 28. 将字节数组转换为publickey ECDSA
- 29. 将字节数组转换为.wav java
- 30. 将C#字节数组转换为VB.NET
我试图将其保存为图像。这就是问题所在。我可以看到保存它的唯一方法是作为“图像”数据类型,它需要一个字节数组。我没有一个字节数组,我有一个xy点的负载 – MichaelMcCabe 2010-11-23 09:53:14
好吧,我以为你会从一个位图开始,并从位图获取点列表。那么,如果有疑问:相信马克Gravell :) – 2010-11-24 17:04:26