13

スマート カメラ イメージャーから画像をキャプチャし、ソケット プログラミングを通じてカメラからバイト配列を受信して​​います (.NET アプリケーションがクライアント、カメラがサーバー)。

問題は、実行時に System.InvalidArgument 例外が発生することです。

private Image byteArrayToImage(byte[] byteArray) 
{
    if(byteArray != null) 
    {
        MemoryStream ms = new MemoryStream(byteArray);
        return Image.FromStream(ms, false, false); 
        /*last argument is supposed to turn Image data validation off*/
    }
    return null;
}

私は多くのフォーラムでこの問題を検索し、多くの専門家からの提案を試みましたが、何も役に立ちませんでした.

同じバイト配列をVC++ MFCクライアントアプリケーションにフィードすると、画像が得られるため、バイト配列自体に問題があるとは思いません。しかし、これは C#.NET ではうまくいきません。

誰でも私を助けることができますか?

PS :

同じタスクを達成しようとした他の方法は次のとおりです。

1.

private Image byteArrayToImage(byte[] byteArray)
{
    if(byteArray != null) 
    {
        MemoryStream ms = new MemoryStream();
        ms.Write(byteArray, 0, byteArray.Length);
        ms.Position = 0; 
        return Image.FromStream(ms, false, false);
    }
    return null;
}

2.

private Image byteArrayToImage(byte[] byteArray) 
{
    if(byteArray != null) 
    {
        TypeConverter tc = TypeDescriptor.GetConverter(typeof(Bitmap));
        Bitmap b = (Bitmap)tc.ConvertFrom(byteArray);
        return b;
    }
    return null;
}

上記の方法はどれも機能しませんでした。親切に助けてください。

4

10 に答える 10

4

画像が OLE フィールドに埋め込まれている可能性があり、88 バイトの OLE ヘッダーとペイロードを考慮する必要があります。

byteBlobData = (Byte[]) reader.GetValue(0);
stream = new MemoryStream(byteBlobData, 88, byteBlobData.Length - 88);
img = Image.FromStream(stream);
于 2010-02-02T15:47:44.180 に答える
3

これを行うときにこの問題が発生しました:

MemoryStream stream = new MemoryStream();
screenshot.Save(stream, ImageFormat.Png);
byte[] bytes = new byte[stream.Length];
stream.Save(bytes, 0, steam.Length);

最後の2行が問題です。私はこれを行うことでそれを修正しました:

MemoryStream stream = new MemoryStream();
screenshot.Save(stream, ImageFormat.Png);
byte[] bytes = stream.ToArray();

そして、これはうまくいきました:

MemoryStream stream = new MemoryStream(bytes);
var newImage = System.Drawing.Image.FromStream(stream);
stream.Dispose();
于 2009-10-27T21:59:29.837 に答える
0

このコードは機能しています

        string query="SELECT * from gym_member where Registration_No ='" + textBox9.Text + "'";

        command = new SqlCommand(query,con);
        ad = new SqlDataAdapter(command);
        DataTable dt = new DataTable();
        ad.Fill(dt);
        textBox1.Text = dt.Rows[0][1].ToString();
        textBox2.Text = dt.Rows[0][2].ToString();
        byte[] img = (byte[])dt.Rows[0][18];
        MemoryStream ms = new MemoryStream(img);

        pictureBox1.Image = Image.FromStream(ms);
        ms.Dispose();
于 2015-12-07T17:37:05.830 に答える