Unter anderem durch ein eigenes Projekt sowie nebenbei auch durch dieses Thema
http://www.purebasic.fr/german/viewtopi ... light=icon
habe ich mich letzte Woche und gestern gemeinsam mit Falko und Donald ein wenig mit
dem Thema auseinander gesetzt. Dabei sind wir zu folgendem Fazit gekommen:
- Laden des File in ein Image: #True
- Anzeige des Image in einem ButtonImage oder ImageGadget: #True
- Größenänderung des Image: #False
- speichern des Image in einem neuen File: #False
Donald kam auf die Idee, es mal über das Clipboard zu versuchen, also
das Image erst einmal dort abzulegen und dann wieder zu laden und dann
erst zu ändern oder zu speichern. Das wiederum funktioniert.
Falko hatte einige andere Ideen, die auch funktionieren.
Ich habe selbst auch ein paar Wege entwickelt es als "richtiges" Image
zu laden und dann zu verarbeiten, das ist aber nicht der Punkt, sondern
stehe ich auf dem Standpunkt: BUG
Warum? Kann ich es laden, sollte ich es auch verarbeiten können.
Hier ist mal ein Testcode dazu.
Code: Alles auswählen
; Testprogramm laden und ändern und speichern Icon-Files
; Hallo Falko, lass das Ding erst mal so laufen, ohne die Resize
; Dann mach das mal aktiv, da siehst du was ich meine.
; Das mit dem Speichern siehst du gleich beim Beenden.
; Donald´s Idee mit dem Clipboard nachträglich eingefügt.
file.s=OpenFileRequester("Laden","c:\","Symboldateien (*.ico)|*.ico",0)
If Right(file,4)<>".ico" : End: EndIf
If LoadImage(0,file): Else: End: EndIf
; zuerst nur bei Resize die Auskommentierung entfernen
; dann auch hier, da geht es dann plötzlich
; SetClipboardImage(0)
; GetClipboardImage(0)
; wenn das Bild vorher nicht in die Zwischenablage kommt,
; gibt es weiter unten einen Fehler und das Bild wird auch
; nicht gespeichert.
; If ResizeImage(0,150,150)
; Else
; MessageRequester("Nein, nein","")
; EndIf
; Fenster
If OpenWindow(0,0,0,200,100,"Test",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
If CreateGadgetList(WindowID(0))
ImageGadget(0,10,10,1,1,ImageID(0))
Repeat
Until WaitWindowEvent()=#PB_Event_CloseWindow
EndIf
EndIf
; versuchen zu speichern
temp.s=GetTemporaryDirectory()+"savediconfile.bmp"
If SaveImage(0,temp)
Else
MessageRequester("nicht gespeichert","")
EndIf
End
- Das man kein Icon als solches speichern kann ist klar, dafür gibt es
ja kein Plugin.
- bei Windows9x wird gar nicht resized
- bei XP wird wohl resized, aber das Image ist dann schwarz
Gruß Jens