2013-03-28 13 views
1

내가 가지고 제가 아직 파일에 저장하지 않은 이미지의 해시를 계산 할 수 있도록 다음과 같은 기능 :vb.net 이미지 VB.NET에서

Public Function pictureHash(ByVal image As System.Drawing.Image) As String 
    Try 
    If image Is Nothing Then Return Nothing 
    Dim ha As HashAlgorithm = HashAlgorithm.Create() 
    Dim ms As New MemoryStream() 
    image.Save(ms, image.RawFormat) 
    ms.Position = 0 
    Dim imageHash As Byte() = ha.ComputeHash(ms) 
    ms.Close() 
    Return BitConverter.ToString(imageHash) 
    Catch ex As Exception 
    Return Nothing 
    End Try 
End Function 

문제는 내가 명령 image.Save(ms, image.rawFormat)에 ArgumentNullException을 얻는 것입니다.

System.ArgumentNullException occurred 
    Message="Value cannot be null. Parameter name: encoder" 
    ParamName="encoder" 
    Source="System.Drawing" 
    StackTrace: 
     at System.Drawing.Image.Save(Stream stream, ImageCodecInfo encoder, EncoderParameters encoderParams) 
     at System.Drawing.Image.Save(Stream stream, ImageFormat format) 
     at MyProgram.pictureHash(Image image) 

내가 스택 추적 볼 때 일이, 마지막 호출은 3 개 개의 매개 변수 (충돌 것)과에서 Image.Save하는이되지 않습니다 : 여기에

예외의 세부 사항입니다 심지어 나에 의해 만들어지는. 그러나 이전의 Image.Save 콜.

내가 어떻게해야할까요? 당신의 도움에 미리

많은 감사,

감사합니다,

조엘

+0

[ "값은 null 일 수 없습니다 매개 변수의 이름입니다. : 인코더의"이미지의 원시 형식을 얻기]의 가능한 중복 : (http://stackoverflow.com이 비슷한과 저장에 대한 호출을 대체 할하려면/questions/13269491/get-the-image-value-of-null-parameter-name-encode 할 수 없음) – sloth

+0

[썸네일 만들기 및 바이트 배열로 변환] 가능한 복제본 (http : //stackoverflow.com/questions/894098/create-a-thumbnail-and-then-convert-to-byte-array/894211#894211) – sloth

+0

이미지의 출처 (예 : 파일, 데이터베이스 등) 및 파일 형식 (png, bmp, jpg 등)은 무엇입니까? –

답변

0

Image.Save method에 대한 지역 사회의 내용에 따라 특정 이미지 형식은 관련 인코더를 가지고 있고 오류와 함께 실패하지 않는다 당신은보고하고 있습니다.

파일을 MemoryStream에 저장할 때 표준 형식 (예 : bmp 또는 png)을 사용할 수 없습니까?

image.Save(ms, ImageFormat.Png) 
+0

@Tim Greaves에게 감사의 말을 전합니다. 공급 업체 SDK에서 가져온 이미지는 jpg 여야하지만 실제로는 png입니다 (파일에 저장하면 헤더에서 png라고 볼 수 있습니다). 그리고이 특별한 경우에는 image.rawFormat가 MemomoryBmp에 해당합니다. 이것이 ArgumentNullException과 충돌 한 이유입니다. – Joel