【解決方法】バイトの変換[] 文字列に、またはその逆が機能しない

[ad_1]

私はバイトを持っています[] 画像情報が保存されています。 バイトを変換すると[] イメージするには機能しますが、バイトを変換しようとすると[] 文字列に、再び文字列からバイトに[] その変換されたバイトを使用します[] ImageConverter では動作しません

私が試したこと:

コード:

このコードは機能しません

C#
byte[] buffer = ms.ToArray();
string bytes2string = Encoding.ASCII.GetString(buffer);
byte[] imageByte = Encoding.ASCII.GetBytes(bytes2string);
ImageConverter convertData = new ImageConverter();
Image image = (Image)convertData.ConvertFrom(imageByte);
image.Save(path);

解決策 1

これが私がそれを行う方法です:
画像をバイトに変換[] 配列:

C#
MemoryStream ms = new MemoryStream();
imageIn.Save(ms,System.Drawing.Imaging.ImageFormat.Bmp);
Byte[] bytes = ms.ToArray();

バイト変換[] 画像への配列:

C#
MemoryStream ms = new MemoryStream(bytes);
Image imageOut = Image.FromStream(ms);

絶対に必要でない限り、文字列を経由しないでください – そして、「通常の」文字列の代わりに Base64 を使用してください – 文字列は常に Unicode であり、画像内の値の一部は通常の文字列によって間違って解釈される可能性があり、バイト配列につながります変換後のオリジナルと同じではありません。

[edit]

引用:

画像ファイル名と画像の両方を同じバイトで送信するにはどうすればよいですか[]?

賢明な方法は、文字列とバイト配列のプロパティを保持するコンテナ クラスを作成することです。
次に、JSON を使用して簡単に転送できる文字列を作成し、最後に逆シリアル化します。
Newtonsoft.Json を使用する場合は簡単です。

C#
            Image image = Bitmap.FromFile(@"D:\Test Data\MyPic.jpg");
            pictureBox1.Image = image;
            MemoryStream ms = new MemoryStream();
            image.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
            ImageWithName iwm1 = new ImageWithName() { Name = "Hello.jpg", ImageData = ms.ToArray() };
            string jsonBody = JsonConvert.SerializeObject(iwm1);
...
            ImageWithName iwm2 = JsonConvert.DeserializeObject<ImageWithName>(jsonBody);
            ms = new MemoryStream(iwm2.ImageData);
            image = Bitmap.FromStream(ms);
            pictureBox2.Image = image;

[/edit]

[ad_2]

コメント

タイトルとURLをコピーしました