2010-04-04 4 views
3

여기에 XML 파일의 16 진수 문자열로 인코딩 된 그림을 수집하려고합니다. 나는 이것에 대한 답을 찾기 위해 온통 찾고 있었고 어디에서나 그것을 찾을 수 없었습니다. 여기에 제가 지금 있습니다.XML의 16 진수 문자열에서 JPEG 이미지 얻기

byte[] bytes = Convert.FromBase64String(FilterResults("PHOTOGRAPH")); 
MemoryStream mem = new MemoryStream(bytes); 
Image bmp2 = Image.FromStream(mem); 

return bmp2; 

FilterResults 함수는 XML에서 문자열을 반환합니다. 문자열을 가져 와서 바이트 []로 변환 할 수 있지만 Image.FromStream (mem)을 실행하자마자 "Parameter Incorrect"오류가 발생합니다.

아이디어가 있으십니까?

+0

가정 FilterResults 올바르게 문자열을 반환합니다 (이 가능성 않는 FromBase64String 때문에 유효한 base64가 아닌 경우 예외가 발생합니다.) 코드에 아무 것도 표시되지 않습니다. 데이터가 실제로 JPEG 이미지입니까? XML 파일을 어딘지에 업로드 할 수 있습니까? –

+0

이미지 헤더가 포함 된 이미지로 인코딩되지 않습니다. 처음 8 바이트 값을 게시하십시오. –

+0

여기에 문서/데이터 블록의 상위 8 바이트가 있습니다. ffd8ffe0 –

답변

3

코드 스 니펫이 정확합니다 (MemoryStreamIDisposable을 구현하므로 using 블록으로 묶어야 함).

Image.FromStream은 스트림의 이미지 형식을 인식하지 못하면 ArgumentException을 던집니다. 따라서 표시하지 않는 코드가 없으면 문제는 이미지 자체와 함께 있어야합니다. 코드가 올바른지 자신을 만족시키기 위해

는 어딘가 하드 드라이브에 앉아 실제 이미지 파일에 다음과 같은 테스트 프로그램을 사용

string imageBase64; 
using (Image image = Image.FromFile(@"C:\path_to_image.jpg")) 
{ 
    using (MemoryStream ms = new MemoryStream()) 
    { 
     image.Save(ms, ImageFormat.Jpeg); 
     imageBase64 = Convert.ToBase64String(ms.ToArray()); 
    } 
} 
Console.WriteLine(imageBase64.Length); 

byte[] imageData = Convert.FromBase64String(imageBase64); 
using (MemoryStream ms = new MemoryStream(imageData)) 
{ 
    using (Image image = Image.FromStream(ms)) 
    { 
     Console.WriteLine(image.Width); 
    } 
}