C#에서의 PictureBox에서 바이트 배열을 표시, 대부분의 제안내가 질문과 답변을 많이 읽어
pictureBox.Image = Image.FromStream(stream);
난 항상 얻을 : "처리되지 않은 예외 형식의 'System.ArgumentException'System.Drawing.dll에서 발생했습니다.
추가 정보 : 매개 변수가 유효하지 않습니다. "
에 대해서는 스트림 매개 변수와 관련됩니다. 심지어 경우에
:
byte[] byteArray = new byte[1];
byteArray[0] = 255;
그 이유를 알아낼 수 없습니다.
이 편집 :
나는이 같은 파일에서 데이터를 얻을 :
이//byteArray is defined as List<byte> byteArray = new List<byte>();
TextReader tr = new StreamReader(file);
string File = tr.ReadToEnd();
string[] bits = File.Split('\t');
List<string> image = new List<string>(bits);
height = int.Parse(bits[0]);
width = int.Parse(bits[1]);
image.RemoveRange(0, 2);
image.RemoveAt(image.Count - 1);
foreach (string s in image)
{
byteArray.Add(byte.Parse(s));
}
return byteArray //(i do .ToArray() in the MemoryStream call);
디버거에서, 내가 즉 BYTEARRAY 괜찮 볼 등 어디서나 = 2244
를 값을 계산EDIT # 2 : 샘플 데이터 파일
47 15 12 55 25 52 55 25 52 55 25 52 55 25 52 55
25 52 55 25 52 55 25 52 55 25 52 55 25 52 55 25
52 55 25 52 55 25 52 55 25 52 55 25 52 55 25 52
55 25 52 55 25 52 55 25 52 55 25 52 55 25 52 55
25 52 51 24 82 49 24 82 49 24 92 50 25 12 50 24
92 48 24 92 50 24 82 50 25 02 50 24 92 50 25 02
51 25 12 50 24 92 49 25 02 50 25 02 49 25 12 49
25 02 49 25 02 47 25 12 47 25 22 50 24 82 47 24
82 50 24 72 50 24 82 49 24 82 50 24 72 50 24 82
50 24 72 49 24 82 49 25 22 52 24 92 50 24 82 50
24 72 47 25 00 etc.
,536,913 (제 1 바이트 [0] 높이 번째 바이트 [1], 나머지는 RGB 데이터 폭이다) 63,210
수정 # 3 : 솔루션
Bitmap bmp = new Bitmap(width, height, PixelFormat.Format24bppRgb);
BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.WriteOnly, PixelFormat.Format24bppRgb);
IntPtr ptr = bmpData.Scan0;
Marshal.Copy(byteArray, 0, ptr, height * width * 3);
bmp.UnlockBits(bmpData);
pictureBox.Image = bmp;
필요는 4 바이트 정렬을 확인하기 때문에 로딩 기능은 이제 :
TextReader tr = new StreamReader(file);
string File = tr.ReadToEnd();
string[] bits = File.Split('\t');
List<string> image = new List<string>(bits);
height = int.Parse(bits[0]);
width = int.Parse(bits[1]);
int falseBits = 0;
int oldWidth = width;
while (width % 4 != 0)
{
width++;
falseBits++;
}
int size = height * width * 3;
byte[] byteArray = new byte[size];
Parallel.For(0, size - 1, i => byteArray[i] = 255);
int index = 0;
int lineIndex = 0;
image.RemoveRange(0, 2);
image.RemoveAt(image.Count - 1);
foreach (string s in image)
{
byteArray [index] = byte.Parse(s);
byteArray [index + 1] = byteArray [index];
byteArray [index + 2] = byteArray [index];
index +=3;
lineIndex++;
if (lineIndex == oldWidth)
{
lineIndex = 0;
index += 3*falseBits;
}
}
return byteArray ;
bytearray의 이미지 형식은 무엇입니까? 그리고 마지막 예제는 절대로 작동하지 않을 것이다. 1 바이트 이미지를 생각할 수 없다. :) – scartag
바이트 [] 데이터가 잘 형성되지 않았다. – leppie
마지막 예제는 데이터가 잘 형성되어 있다는 것을 알았을 때도 스트림이 작동하지 않는다고 말하는 것입니다. 내가 가지고있는 데이터의 예를 편집하고 쓰겠습니다 – Smash