Díky za podnět. Vytvořil jsem si tedy funkci, která má na vstupu objekt Image a měla by vracet objekt Icon. Převod provádím tak, že se obrázek objektu Image uloží do dočasného adresáře jako nový soubor ve formátu ikony, a ten se pak načte do objektu Icon, který pak funkce vrací. Toliko teorie. Zde je můj návrh kódu:
Private Function GetIconFormImage(ByVal img As Image) As Icon
Dim tmpName As String
Dim OutFormat As ImageFormat = ImageFormat.Icon
'====================================================
'Získání jména dočasného souboru
tmpName = GetTempPath() & _
GetFileNameWithoutExtension(GetTempFileName)
'Přiřazení přípony
tmpName &= "." & OutFormat.ToString
'Uložení suboru ve zvoleném formátu
img.Save(tmpName, OutFormat)
'Návratová hodnota
Return New Icon(tmpName)
'Smazání dočasného souboru
System.IO.File.Delete(tmpName)
End Function
Programu se zastaví na kroku, kdy se má provést načtení do objektu nové ikony s vyjímkou, že obrázek nelze použít jako ikonu (Argument 'picture' must be a picture that can be used as a Icon.). Když jsem se podíval do dočasné složky, našel ten dočasný soubor s příponou Icon a zobrazil jej v prohlížeči v textovém modu, zjistil jsem, že je to ve skutečnosti jen soubor ve formátu PNG a příponou Icon. Žádná ikona. Zřejmě to není s konverzí bmp => ico tak jednoduché, neboť u ikony se například definuje i průhledná barva, že? Zřejmě svůj ikonový problém vyřeším načtením objektů ikon z opravdových souborů ikon hned při spuštění aplikace do pole.
|