Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将.tiff读取到内存中的字节数组,然后转换到映像_C#_Image_Memorystream - Fatal编程技术网

C# 将.tiff读取到内存中的字节数组,然后转换到映像

C# 将.tiff读取到内存中的字节数组,然后转换到映像,c#,image,memorystream,C#,Image,Memorystream,我收到了一个项目,涉及从Access数据库表中读取记录,并将这些信息放入一本大的PDF小册子中 Access表中的一列是包含.tiff图像信息的备注列。我之所以这样做,是因为写入文本文件时,文件信息以“II*”开头,我读到的是一个.tiff头,表明文件是按英特尔字节顺序排列的 所以,说到这里,我需要将这个MEMO字段转换成一个图像,并将该图像写入PDF,如果可能的话,我想在内存中完成 到目前为止,我实际转换的代码如下: using System; using System.Drawing; us

我收到了一个项目,涉及从Access数据库表中读取记录,并将这些信息放入一本大的PDF小册子中

Access表中的一列是包含.tiff图像信息的备注列。我之所以这样做,是因为写入文本文件时,文件信息以“II*”开头,我读到的是一个.tiff头,表明文件是按英特尔字节顺序排列的

所以,说到这里,我需要将这个MEMO字段转换成一个图像,并将该图像写入PDF,如果可能的话,我想在内存中完成

到目前为止,我实际转换的代码如下:

using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Collections.Generic;
using System.Text;

namespace ElectionsPollBooks
{
    class ImageConversion
    {
        public Image ConvertMemo(string s_convert)
        {

            byte[] ba_incTiff = Encoding.Unicode.GetBytes(s_convert);//string of information from the Memo field in the Access Database
            using (MemoryStream ms_incTiffImage = new MemoryStream(ba_incTiff))//takes our just converted byte array and reads it to memory as the input tiff
            {
                return Image.FromStream(ms_incTiffImage);//take said tiff stream that we just made, and return it as an image.
            }
        }
    }
}
现在我在
返回图像.FromStream(ms\u incTiffImage)上得到
参数无效“
错误
method,我理解这意味着字节数组不是
Image.FromStream()
方法所理解的任何形式的数据

这让我想知道我的问题是否是在这一行中使用Unicode编码读取字符串:
byte[]ba_incTiff=encoding.Unicode.GetBytes(s_convert)

但这对我来说是全新的领域,我不确定我的思维过程是否正确

任何帮助都将不胜感激

谢谢大家抽出时间

更新: 当我使用
file.writealText(@“revonelvant\Path\Foo\test.txt”,s_convert)将备注字段输出到文本文件时

最后,我将其作为输出的一个片段:

二、P8$BaP¸d6ˆDbQ8¸V-FcQ¸V=HdR9$–M'“JeRüd”/)LfS9Öm7äNgSä

一些补充资料:

ba_incTiff
以14176字节的计数结束,前5个字节是73,0,73,0,42(我不确定这是否相关,但我现在正在抓救命稻草)

更新

我能够发现在备忘录文件中存储的信息上是否有任何特殊的编码,以发现没有

通过将
byte[]ba_incTiff=Encoding.Unicode.GetBytes(s_convert)
更改为
byte[]ba_incTiff=Encoding.Default.GetBytes(s_convert),我能够克服这个问题


但是,现在我收到一个
在GDI+中发生的一般错误。
错误…

因此图像在Access中存储为字符串?我认为您需要确定该字符串是如何生成的
Encoding.X.GetBytes(s)
将获取表示字符串的字节,而不是原始字节数组的字符串表示形式的实际转换。通常,存储为字符串的字节数组是base64或hex-数据是这两种格式之一吗?如果您可以提供其中一个图像的文本示例,可能很清楚它是什么类型的…@MikeT你不能通过文本编辑器复制/粘贴二进制数据。我敢打赌这些数据是垃圾数据——首先是错误插入的。有人确认过有人成功读取过该表中的图像吗?如果有的话,是否有人拥有应用程序的源代码?看起来有人获取了一个图像的字节数组,对该图像进行了
编码.UTF8.GetString
(或类似),然后将该字符串转储到数据库中。如果发生这种情况,则无法检索数据,因为字符串不能准确反映字节。将字节数组存储为字符串的正确方法是只使用可打印字符(特别是可打印ASCII字符),可以在没有歧义的情况下来回转换。这就是Base64、十六进制、ASCII-85、basE91等的用途。Base64可能是最常见的,因为它是一致的(3个字节=4个字符,不包括填充),并且易于读取。十六进制易于读取,但更大,而ASCI85和basE91较小,但不太常见,不太一致,更难读取。因此图像在Access中存储为字符串?我认为您需要确定该字符串是如何生成的
Encoding.X.GetBytes(s)
将获取表示字符串的字节,而不是原始字节数组的字符串表示形式的实际转换。通常,存储为字符串的字节数组是base64或hex-数据是这两种格式之一吗?如果您可以提供其中一个图像的文本示例,可能很清楚它是什么类型的…@MikeT你不能通过文本编辑器复制/粘贴二进制数据。我敢打赌这些数据是垃圾数据——首先是错误插入的。有人确认过有人成功读取过该表中的图像吗?如果有的话,是否有人拥有应用程序的源代码?看起来有人获取了一个图像的字节数组,对该图像进行了
编码.UTF8.GetString
(或类似),然后将该字符串转储到数据库中。如果发生这种情况,则无法检索数据,因为字符串不能准确反映字节。将字节数组存储为字符串的正确方法是只使用可打印字符(特别是可打印ASCII字符),可以在没有歧义的情况下来回转换。这就是Base64、十六进制、ASCII-85、basE91等的用途。Base64可能是最常见的,因为它是一致的(3个字节=4个字符,不包括填充),并且易于读取。十六进制易于阅读,但更大,ASCI85和basE91更小,但不太常见,不太一致,更难阅读。