2011-10-02 3 views
5

WindowsAPICodePack을 사용하여 ShellFile의 축소판 그림을 얻습니다. 그러나 일반 아이콘처럼 보이는 일부는 검은 배경입니다. 그러므로 나는 그것을 비트 맵으로 만들고 검은 색을 투명하게 설정했다."실제"섬네일이 아닌 "아이콘"의 ShellFile "아이콘"의 배경색을 제거하는 방법

문제는 사진의 미리보기 이미지 일 때 문제가되지 않는다는 것입니다. 어떻게 실제 미리보기 이미지를 "아이콘"으로 말할 수 있습니까?

내 코드 :

ShellFile sf = ShellFile.FromFilePath(path); 
Bitmap bm = sf.Thumbnail.MediumBitmap; 
bm.MakeTransparent(Color.Black); 

감사

+2

하드 :

그래서 코드는 다음과 같을 것이다. Anyhoo, 먼저 FormatOption 속성을 사용하여 아이콘 만 묻습니다. 그래도 실패하면 미리보기 이미지를 요청하십시오. –

+0

@ 한스) 감사합니다. 정확히 내가 무엇을 찾고 있었는지. (하지만 처음에는 미리보기 이미지를 요구합니다. 항상 아이콘이 있습니다.) b) 배경색을 제거 할 다른 방법이 있습니까? 그렇지 않다면 비트 맵 대신 아이콘을 얻을 수 있다고 생각합니다. 이제는 미리보기 이미지가 아닐 것입니다. – ispiro

답변

3

당신은 다른 각도에서이 문제에 접근 할 수 있습니다. 썸네일 그림이 있으면 추출하거나 연관된 응용 프로그램 아이콘을 추출하도록 강제로 ShellFile.Thumbnail을 강제 실행할 수 있습니다. MakeTransparent 검은 포함 된 아이콘에 잘 작동하는 방법을 볼 수

Bitmap bm; 
using (ShellFile shellFile = ShellFile.FromFilePath(filePath)) 
{ 
    ShellThumbnail thumbnail = shellFile.Thumbnail; 

    thumbnail.FormatOption = ShellThumbnailFormatOption.ThumbnailOnly; 

    try 
    { 
     bm = thumbnail.MediumBitmap; 
    } 
    catch // errors can occur with windows api calls so just skip 
    { 
     bm = null; 
    } 
    if (bm == null) 
    { 
     thumbnail.FormatOption = ShellThumbnailFormatOption.IconOnly; 
     bm = thumbnail.MediumBitmap; 
     // make icon transparent 
     bm.MakeTransparent(Color.Black); 
    } 
} 
+1

"Windows API 호출시 오류가 발생할 수 있으므로 건너 뜁니다"-이 좋은 방법입니까? – BudBrot

+0

당신은이 같은 HRESULT 0x8004B200으로 만 COMException을 잡을 수 : COMException로'캐치 (InvalidOperationException이 예) { \t COMException comException = ex.GetBaseException(); \t if (comException.ErrorCode! = unchecked ((int) 0x8004B200) \t \t throw; \t // TODO : Do something }' –