[C#] 일반적인 이미지 형식을 허용하도록 필터를 OpenFileDialog로 설정 하시겠습니까?

이 코드가 있는데 모든 일반적인 이미지 형식을 허용하도록하려면 어떻게해야합니까? PNG, JPEG, JPG, GIF?

여기까지 내가 가진 것입니다 :

public void EncryptFile()
{            
    OpenFileDialog dialog = new OpenFileDialog();
    dialog.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
    dialog.InitialDirectory = @"C:\";
    dialog.Title = "Please select an image file to encrypt.";

    if (dialog.ShowDialog() == DialogResult.OK)
    {
        //Encrypt the selected file. I'll do this later. :)
    }             
}

필터는 .txt 파일로 설정되어 있습니다. 내가 할 수 PNG로 변경,하지만 다른 종류의?



답변

에서 워드 프로세서 다음과 같이 당신이 필요로하는 필터 구문은 다음과 같습니다

Office Files|*.doc;*.xls;*.ppt

즉, 여러 확장명을 세미콜론으로 구분하십시오 Image Files|*.jpg;*.jpeg;*.png;....


답변

이미지 파일을 찾아 보는 경우이 패턴을 따르십시오.

dialog.Filter =  "Image files (*.jpg, *.jpeg, *.jpe, *.jfif, *.png) | *.jpg; *.jpeg; *.jpe; *.jfif; *.png";


답변

다음은 ImageCodecInfo 제안 (VB)의 예입니다.

   Imports System.Drawing.Imaging
        ...

        Dim ofd as new OpenFileDialog()
        ofd.Filter = ""
        Dim codecs As ImageCodecInfo() = ImageCodecInfo.GetImageEncoders()
        Dim sep As String = String.Empty
        For Each c As ImageCodecInfo In codecs
            Dim codecName As String = c.CodecName.Substring(8).Replace("Codec", "Files").Trim()
            ofd.Filter = String.Format("{0}{1}{2} ({3})|{3}", ofd.Filter, sep, codecName, c.FilenameExtension)
            sep = "|"
        Next
        ofd.Filter = String.Format("{0}{1}{2} ({3})|{3}", ofd.Filter, sep, "All Files", "*.*")

그리고 다음과 같이 보입니다 :

여기에 이미지 설명을 입력하십시오


답변

C #의 완벽한 솔루션은 다음과 같습니다.

private void btnSelectImage_Click(object sender, RoutedEventArgs e)
{
    // Configure open file dialog box 
    Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();
    dlg.Filter = "";

    ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();
    string sep = string.Empty;

    foreach (var c in codecs)
    {
       string codecName = c.CodecName.Substring(8).Replace("Codec", "Files").Trim();
       dlg.Filter = String.Format("{0}{1}{2} ({3})|{3}", dlg.Filter, sep, codecName, c.FilenameExtension);
       sep = "|";
    }

    dlg.Filter = String.Format("{0}{1}{2} ({3})|{3}", dlg.Filter, sep, "All Files", "*.*");

    dlg.DefaultExt = ".png"; // Default file extension 

    // Show open file dialog box 
    Nullable<bool> result = dlg.ShowDialog();

    // Process open file dialog box results 
    if (result == true)
    {
       // Open document 
       string fileName  = dlg.FileName;
       // Do something with fileName  
    }
} 


답변

이미지 파일을 필터링하려면이 코드 샘플을 사용하십시오.

//Create a new instance of openFileDialog
OpenFileDialog res = new OpenFileDialog();

//Filter
res.Filter = "Image Files|*.jpg;*.jpeg;*.png;*.gif;*.tif;...";

//When the user select the file
if (res.ShowDialog() == DialogResult.OK)
{
   //Get the file's path
   var filePath = res.FileName;
   //Do something
   ....
}


답변

Tom Faust의 답변이 가장 좋습니다. 다음은 그의 솔루션의 C # 버전이지만 약간 단순화합니다.

var codecs = ImageCodecInfo.GetImageEncoders();
var codecFilter = "Image Files|";
foreach (var codec in codecs)
{
    codecFilter += codec.FilenameExtension + ";";
}
dialog.Filter = codecFilter;


답변

이미지의 경우 GDI (System.Drawing)에서 사용 가능한 코덱을 가져 와서 약간의 작업으로 목록을 작성할 수 있습니다. 가장 유연한 방법입니다.

ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();