2016-09-07 3 views
1

저는 C#, wpf를 사용합니다. 양식에 바이트 []바이트 []의 이미지 표시

public interface IFile 
{ 
    int Id { get; set; } 
    byte[] FileData { get; set; }   
    string FileName { get; set; } 
    int? FileSize { get; set; } 
    string FileExtension { get; set; } 
} 

내 이미지를 표시하는 방법 (FILEDATA 바이트 []) : 나는 이미지, 그것은의 형태로 저장되어 있나요? 내가 바이트 []에서 임시 파일을 만드는 경우

<GroupBox BorderThickness="1"> 
    <Image Source="..."/> 
</GroupBox> 

나는 Source="..."에 작성해야? 당신이 당신의 IFile 인터페이스를 구현하는 뷰 모델 클래스를 가지고

+1

WPF는 기본 제공하기 때문에 유형 변환 여러 소스 유형 ('byte []'포함)에서'ImageSource'에 이르기까지''를 쓸 수 있어야합니다. 바이트 배열은 인코딩 된 이미지 버퍼를 포함해야합니다. PNG 또는 JPEG. – Clemens

+1

바인딩이 작동하려면 Image 컨트롤 (또는 부모 컨트롤 또는 MainWindow 중 하나)의 DataContext를 IFile 인터페이스를 구현하는 클래스의 인스턴스로 설정해야합니다. – Clemens

+0

클레멘스, 고마워! 정말로 일한다!! – Olga

답변

3

을 제공, 그 FileData 속성은 PNG 또는 JPEG와 같은 인코딩 된 이미지 버퍼를 포함, 직접이 같은 속성에 바인딩 할 수 있습니다 :

<Image Source="{Binding FileData}"/> 

WPF는 byte[]을 포함하여 여러 소스 유형에서 ImageSource으로 자동 변환을 제공하기 때문에 발생합니다.


유형 변환이 TypeConverter를

[TypeConverterAttribute(typeof(ImageSourceConverter))] 
public abstract class ImageSource ... 

로 등록이 비슷한 무언가를하는 클래스 ImageSourceConverter에 의해 수행된다

byte[] buffer = ... 
ImageSource result; 
using (var stream = new MemoryStream(buffer)) 
{ 
    result = BitmapFrame.Create(
     stream, BitmapCreateOptions.None, BitmapCacheOption.OnLoad); 
} 
관련 문제