Laden, verändern, speichern von Icon-Files ist fehlerhaft

Hier werden, insbesondere in den Beta-Phasen, Bugmeldungen gepostet. Das offizielle BugForum ist allerdings hier.
Benutzeravatar
sharkpeter
Beiträge: 474
Registriert: 29.08.2004 16:18
Wohnort: Dresden
Kontaktdaten:

Laden, verändern, speichern von Icon-Files ist fehlerhaft

Beitrag von sharkpeter »

Hallo Leute,

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
Edit//:
- 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
PB3.94 bis 6.xx / (Win98/98SE/ME/XPProSP3/WINVista-X32)/WIN7HP-X64/WIN8PRO-X32/WIN10-64

Nichts wissen macht nichts, sich dumm stellen aber schon.
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

Hallo Jens,
anscheinend denken hier alle das wäre ein Aprilscherz.
Aber nun im Ernst, hat jemand mal den Source ausprobiert und die
kommentierten Funktionen von oben nach unten nach und nach
mal auskommentiert?

Mit BMP, JPEG usw. funktioniert das Resizen, aber von ico kommt kein
Handle. Nur wenn man das Clipboard (Tip von Donald) gleich nach dem Laden benutzt wird wohl ein Handle vom Icon erzeugt, sodas man danach
das Bild mit ImageID mittels Resize verändern kann und auch korrekt
angezeigt bekommt. Läßt man es weg, wird kein Bild angezeigt, sondern
unter XP nur ein schwarzer Hintergrund sehen. Bei Win9x kommt sogar lustigerweise eine Systemfehlermeldung.

Scheint wohl ein Bug zu sein, oder was denkt ihr?

Gruß Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

Habs mal im englischen Forum geschrieben.

http://www.purebasic.fr/english/viewtop ... highlight=

Bin nur zu müde ums auch in korrektem Englisch und länger zu formulieren.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
sharkpeter
Beiträge: 474
Registriert: 29.08.2004 16:18
Wohnort: Dresden
Kontaktdaten:

Beitrag von sharkpeter »

Also es war kein Aprilscherz, jetzt wo fast Mai ist will ich es mal auflösen.

Habe mir inzwischen was einfallen lassen für den IconMaker, der ist jetzt
auch Online.

Und doch bin ich der Meinung, auch wenn im englischen Forum was anderes
dazu steht: Ich kann´s aufmachen und in ein PB-Image laden, warum
in Gottes Namen soll ich es nicht auch weiterverarbeiten und speichern
können.

Gruß Jens
PB3.94 bis 6.xx / (Win98/98SE/ME/XPProSP3/WINVista-X32)/WIN7HP-X64/WIN8PRO-X32/WIN10-64

Nichts wissen macht nichts, sich dumm stellen aber schon.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

sharkpeter hat geschrieben:warum
in Gottes Namen soll ich es nicht auch weiterverarbeiten und speichern
können.

Gruß Jens
Weil kein entsprechendes ImagePlugin existiert!. Im
Speicher stehen alle als BMP
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

das widerspricht sich jetzt aber.
wenn im speicher alle als BMP stünden, dann müßte es sich ja auch resizen lassen,
nur speichern als .ico ginge nicht.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
sharkpeter
Beiträge: 474
Registriert: 29.08.2004 16:18
Wohnort: Dresden
Kontaktdaten:

Beitrag von sharkpeter »

@ts-soft,

Bingo! Im Speicher stehen alle als *.bmp, und genau darum sage ich ja:
bearbeiten usw. MUSS gehen. Und speichern auch, nur halt nicht als
*.ico, aber das ist ja nicht das Problem. In den unterstützen Formaten
sollte sich das Image jedoch speichern lassen.

@Kearu,

genau das trifft den Kern.

Gruß Jens
PB3.94 bis 6.xx / (Win98/98SE/ME/XPProSP3/WINVista-X32)/WIN7HP-X64/WIN8PRO-X32/WIN10-64

Nichts wissen macht nichts, sich dumm stellen aber schon.
Jilocasin
Beiträge: 665
Registriert: 13.05.2006 16:04
Kontaktdaten:

Beitrag von Jilocasin »

Es steht aba nicht als BMP direkt im Speicher, sonst würde bei nem ImageGadget keine Transparenz zu sehen sein :wink:

Hab mal was ausprobiert....

Code: Alles auswählen

File.s = OpenFileRequester("Wähl ma'n ICON oda 'n BMP aus", "", "Beides|*.ico;*.bmp", 0)

ImageID = LoadImage(0, File)


If GetObject_(ImageID, SizeOf(BITMAP), @ImageInfo.BITMAP)
  Debug ImageInfo\bmWidth ; Als Beispielwerte ausgeben
  Debug ImageInfo\bmHeight
Else
  Debug "Geht nüt"
EndIf
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> Es steht aba nicht als BMP direkt im Speicher, sonst würde bei nem ImageGadget keine Transparenz zu sehen sein.
dann muss man eben schreiben, "es steht als Bitmap im Speicher".
auf jeden fall sind es nicht codierte RAW-daten, die im speicher gehalten werden.

btw: auch das format .bmp kann transparenz enthalten.
aber MS hat diese möglichkeit schnell unterbunden, es wäre wohl zu flexibel gewesen,
viele designer hätten mit PAINT arbeiten können und hätten keine zusätzlichen Apps kaufen müssen.


> Hab mal was ausprobiert....
yo und? was machts?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Jilocasin
Beiträge: 665
Registriert: 13.05.2006 16:04
Kontaktdaten:

Beitrag von Jilocasin »

Der Soruce zeigt dass Icons und Bitmaps, die beide mit LoadImage() geladen wurden unterschiedlich im Speicher stehen :)
Bild
Antworten