Sql Image列转换

时间:2016-07-19 00:46:10

标签: c# sql-server

我正在尝试将图片列转换为tif文件。我理解代码及其工作原理但是列内容对我来说没有多大意义。

我希望有人可以认出这些内容,并让我知道如何继续。

我从我的数据库中提取图像列并填入字节数组。

然后创建了一个文件流对象并写出了tif文件(当我使用内存流方法时,我一直收到无效参数)

文件流创建了tif文件但无法打开(消息说文件已损坏。

所以,一时兴起,我尝试将其转换为字符串。

我怀疑这是正确的,因为内容现在是可读的

"\0\u0001\0\0\0ÿÿÿÿ\u0001\0\0\0\0\0\0\0\f\u0002\0\0\0ISystem, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\u0005\u0001\0\0\0-System.Collections.Specialized.ListDictionary\u0004\0\0\0\u0004head\aversion\u0005count\bcomparer\u0004\0\0\u0003<System.Collections.Specialized.ListDictionary+DictionaryNode\u0002\0\0\0\b\b\u001cSystem.Collections.IComparer\u0002\0\0\0\t\u0003\0\0\0\b\0\0\0\b\0\0\0\n\u0005\u0003\0\0\0<System.Collections.Specialized.ListDictionary+DictionaryNode\u0003\0\0\0\u0003key\u0005value\u0004next\u0002\u0002\u0004<System.Collections.Specialized.ListDictionary+DictionaryNode\u0002\0\0\0\u0002\0\0\0\u0006\u0004\0\0\0\u00040001\u0006\u0005\0\0\0\u0004Text\t\u0006\0\0\0\f\a\0\0\0QSystem.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\u0001\u0006\0\0\0\u0003\0\0\0\u0006\b\0\0\0\n0001Center\t\t\0\0\0\t\n\0\0\0\u0005\t\0\0\0\u0015System.Drawing.PointF\u0002\0\0\0\u0001x\u0001y\0\0\v\v\a\0\0\0u\u001eÔ¿éÉÑÀ\u0001\n\0\0\0\u0003\0\0\0\u0006\v\0\0\0\r0001Expansion\t\f\0\0\0\t\r\0\0\0\u0005\f\0\0\0\u0014System.Drawing.SizeF\u0002\0\0\0\u0005width\u0006height\0\0\v\v\a\0\0\0e€Y@TžK?\u0001\r\0\0\0\u0003\0\0\0\u0006\u000e\0\0\0\t0001Color\t\u000f\0\0\0\t\u0010\0\0\0\u0005\u000f\0\0\0\u0014System.Drawing.Color\u0004\0\0\0\u0004name\u0005value\nknownColor\u0005state\u0001\0\0\0\t\a\a\a\0\0\0\n \0\0ÿ\0\0\0\0\0\0\u0002\0\u0001\u0010\0\0\0\u0003\0\0\0\u0006\u0011\0\0\0\b0001Text\u0006\u0012\0\0\0\u001bPARTIAL RELEASE IN  09/2573\t\u0013\0\0\0\u0001\u0013\0\0\0\u0003\0\0\0\u0006\u0014\0\0\0\b0001Font\t\u0015\0\0\0\t\u0016\0\0\0\u0005\u0015\0\0\0\u0013System.Drawing.Font\u0004\0\0\0\u0004Name\u0004Size\u0005Style\u0004Unit\u0001\0\u0004\u0004\v\u0018System.Drawing.FontStyle\a\0\0\0\u001bSystem.Drawing.GraphicsUnit\a\0\0\0\a\0\0\0\u0006\u0017\0\0\0\u0014Microsoft Sans Serif\0\0\u001cA\u0005èÿÿÿ\u0018System.Drawing.FontStyle\u0001\0\0\0\avalue__\0\b\a\0\0\0\u0001\0\0\0\u0005çÿÿÿ\u001bSystem.Drawing.GraphicsUnit\u0001\0\0\0\avalue__\0\b\a\0\0\0\u0003\0\0\0\u0001\u0016\0\0\0\u0003\0\0\0\u0006\u001a\0\0\0\v0001Charset\b\b\u0001\0\0\0\t\u001b\0\0\0\u0001\u001b\0\0\0\u0003\0\0\0\u0006\u001c\0\0\0\u00130001TextOrientation\b\b\0\0\0\0\n\v"

所以现在看起来我有一串元数据: 名称\ u0005 System.Drawing.FontStyle \ U0001 \ 0 \ 0 \ 0 \一 等等

我的问题是如何将看似名称值对的东西转换成可读的东西?

我期待一个字符串,如

“Satisified on 1/1/2016”,其他属性作为必要条件应用。

由于

编辑:

以下是生成字符串

的代码
        foreach (var item in guids)
        {

            string docGUID = item.DocGuid;
            string path = "C:\\TestAnnotations\\" + docGUID;

            if (!System.IO.Directory.Exists(path))
            {
                System.IO.Directory.CreateDirectory(path);
            }

            var rows = results.AsEnumerable().Where(rw => (string)rw["DocGUID"] == docGUID);
            Bitmap img = new Bitmap(800, 800);
            int lastImagePos = 1;

            foreach (var annotation in rows)
            {

                string fileName = path + "\\" + docGUID + lastImagePos.ToString() + ".tif";
                byte[] buffer = (byte[])annotation["Annotations"];

                var str = System.Text.Encoding.Default.GetString(buffer);

            }

        }

1 个答案:

答案 0 :(得分:0)

我能够通过以下代码运行上面的值来摆脱坏字符并返回一个字符串:

                    for (int i = 0; i < text.Length; i++)
                    {
                        char c = text[i];
                        byte b = (byte)c;
                        if (b < 32)
                            test += " ";
                        else
                            test += c;
                    }