私はハンドヘルドデバイス上にユーザーの署名を保存するために使用されるアプリケーションの一部を持っています。 私は "点"のarraylistを含む "線"のarraylistを持つことによってこれを行うことができました。 この情報を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座標はどのようなデータ型ですか?
スタイラスで署名してビットマップグラフィックを作成できるようにしましたか? これを画像として保存するには、私にとって完全に妥当な音です。
私はイメージとして保存しようとしています。それが問題です。私はそれを保存することができます唯一の方法は、バイト配列が必要な "イメージ"データ型としてです。私はバイト配列を持っていない、私はxyの点の負荷を持っている – MichaelMcCabe
私はあなたがビットマップから開始し、ビットマップからポイントリストを取得すると思った。まあ、間違っている場合:Marc Gravellを信頼してください:) –
あなたがバイナリシリアルのいくつかのフォームを望むように聞こえます。
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画像へのあなたのビットマップを変換します:ここにいるProtobufネットを使用して作業バージョンです(私はList<T>
にArrayList
を変更注意してください)
MemoryStream pngbuffer = new MemoryStream();
Bitmap.Save(pngbuffer,ImageFormat.Png)
バイナリデータとして保存します。ほとんどのデータベースはバイナリデータを格納するための形式を持っています:PostgreSQLバイト、MySQLとOracle BLOB、MSSQLイメージなど
- 1. アップロードされたビットマップをバイト配列に変換してSQL Serverに格納
- 2. Powershellを使用してSQLにバイト配列を格納する
- 3. バイト配列にintを格納する
- 4. 値をバイナリ値に変換して配列に格納する
- 5. int32をバイト配列に格納
- 6. C#:バイト配列をXMLに格納
- 7. 即時からバイトの配列にバイトを格納するMIPS
- 8. データベースに配列を格納する
- 9. derbyデータベースに配列を格納する
- 10. イメージをサーバーにファイルとして保存するか、データベースにバイト配列として格納する
- 11. バイト配列を文字列に変換してバイト配列に戻す
- 12. オブジェクト配列をArraylistに格納します。
- 13. SQLite 1つのテーブルセルにバイト配列を格納する方法
- 14. ArrayListに格納
- 15. PNG圧縮バイト配列をBMPバイト配列に変換する
- 16. ポイントを配列に格納する方法Cocos2d-x C++
- 17. PHP - XMLをPHPで配列に変換する - PHPでsoap xmlを解析してデータベースに格納する
- 18. データベースから選択して配列に格納する
- 19. データベースに.Net ArrayListを格納しています
- 20. 2D文字配列をArrayListに格納したい
- 21. BLOBを迅速に使用して、バイト配列[UInt8]をsqlite3データベースに格納して取り出す方法は?
- 22. データベースに大きな配列を格納しています
- 23. C#バイト配列に変換
- 24. SQLiteデータベースを取得し、オブジェクトの配列に格納する
- 25. NSStringをバイト配列に変換する
- 26. バイト配列をUIImageに変換する
- 27. バイト配列をlongに変換する
- 28. int16をバイト配列に変換する
- 29. バイト配列をpngに変換する
- 30. バイナリをバイトに変換する[]配列
私はこのようにしてしまった。ありがとうHeinzi – MichaelMcCabe