Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Icons mit Delphi erstellen (https://www.delphipraxis.net/68889-icons-mit-delphi-erstellen.html)

Martin K 7. Mai 2006 17:06


Icons mit Delphi erstellen
 
Hi,

hat schon jemand so etwas gemacht ?

Mein neues Projekt soll en IconEditor werden.

Allerdings gibt es noch ein paar Probleme:

:?: 1. Wie kann man die Farbpalette einen Icons ändern?
:?: 2. Wie kann man Icons bearbeiten (verwende zur Zeit die Methode in Bitmap umwandeln. Allerdings geht dann die Transparenz verloren).

Also es sollten möglichst alle Bittiefen verwendet werden können:
32 Bit, 24 Bit, 16 Bit, 8 Bit, 4 Bit, 1 Bit.

Bei den Bittiefen 16, 8, 4 und 1 Bit sollten außerdem die Farben der Palette manuell geändert werden können.
Sind in dieser Beziehung die Paletten bei Bitmaps und Icons (wegen Umwandlung) auch 1:1 kompatibel?


Vielleicht hat ja jemand mit so etwas schon Erfahrungen gesammelt, in der Suche hab ich leider nichts brauchbares gefunden :?
:cyclops: Wäre also für jeden Codeschnipsel dankbar...

DBR 7. Mai 2006 18:58

Re: Icons mit Delphi erstellen
 
http://www.dbr-software.de/delphi/makeico.php

Vielleicht hilfts.

Gruß DBR

Martin K 7. Mai 2006 19:07

Re: Icons mit Delphi erstellen
 
Danke, für die Antwort :thumb:

Nur leider ein ziemlich langer Code ohne Kommentare :?

Aber mal sehen, vielleicht bekomme ich da so langsam den Durckblick :cyclops:



Ich dachte halt, irgendjemand aus der DP hätte vielleicht so was schonmal gemacht und könnte mir evtl. ein paar kleine Tipps geben,
bin für jede Hilfe dankber :!:

Martin K 10. Mai 2006 11:08

Re: Icons mit Delphi erstellen
 
Weiß jemand, wie man eine Farbpalette (4 Bit, 8 Bit) speichern kann (also nur die Palette, ohne Bild) ???

Hab hier Farbpaletten von einem anderen Programm vorliegen (*.dat Dateien), wäre ganz gut wenn ich diese auslesen bzw. wieder speichern könnte...

Martin K 13. Mai 2006 14:07

Re: Icons mit Delphi erstellen
 
Hmm....

Also irgendwie muss man doch eine Farbpalette speichern können...

vielleicht als TStream ?

xaromz 13. Mai 2006 14:20

Re: Icons mit Delphi erstellen
 
Hallo,
Zitat:

Zitat von Martin K
Hmm....

Also irgendwie muss man doch eine Farbpalette speichern können...

vielleicht als TStream ?

Hier hat Luckie ein Codeschnipsel gepostet, in dem auch die Palette gesichert wird.
Hierfür gibt es die Struktur TLogPalette. Das ist ein Record mit einem dynamischen Array am Ende. Im verlinkten Beitrag steht, wie Du Dir die Palette holen kannst. Danach musst Du nur noch den Record irgendwo speichern (SizeOf(TLogPalette) + (Palettengröße - 1) * SizeOf(TPaletteEntry)).

Gruß
xaromz

Martin K 13. Mai 2006 16:00

Re: Icons mit Delphi erstellen
 
Danke erstmal...

Aber irgendwie ist das etwas zu hoch für mich:

Palette laden: :?:
Delphi-Quellcode:
    {allocate memory for a logical palette} 
    GetMem(lpPal,
      SizeOf(TLOGPALETTE) + 
    (255 * SizeOf(TPALETTEENTRY)));
    {zero it out to be neat} 
    FillChar(lpPal^,
      SizeOf(TLOGPALETTE) + 
    (255 * SizeOf(TPALETTEENTRY)),
      #0);
    {fill in the palette version} 
    lpPal^.palVersion := $300;
    {grab the system palette entries} 
    lpPal^.palNumEntries :=
      GetSystemPaletteEntries(dc,
      0,
      256,
      lpPal^.palPalEntry);
    if (lpPal^.PalNumEntries <> 0) then
      {create the palette} 
      bm.Palette := CreatePalette(lpPal^);
    FreeMem(lpPal, SizeOf(TLOGPALETTE) + 
    (255 * SizeOf(TPALETTEENTRY)));
Palette speichern: :?:
Delphi-Quellcode:
  (SizeOf(TLogPalette) + (Palettengröße - 1) * SizeOf(TPaletteEntry));
:wiejetzt: Ja, wo ist denn hier sowas wie FileName oder so???

Kann mir einer helfen?
:arrow: wäre echt nett...

xaromz 13. Mai 2006 16:07

Re: Icons mit Delphi erstellen
 
Hallo,
Zitat:

Zitat von Martin K
Danke erstmal...

Aber irgendwie ist das etwas zu hoch für mich:

Palette laden: :?:

Such Dir doch mal Informationen zu MSDN-Library durchsuchenGetSystemPaletteEntries bzw. MSDN-Library durchsuchenGetPaletteEntries. Damit kannst Du die Palette eines DCs in eine TLogPalette-Struktur laden.
Zitat:

Zitat von Martin K
Palette speichern: :?:
Delphi-Quellcode:
  (SizeOf(TLogPalette) + (Palettengröße - 1) * SizeOf(TPaletteEntry));
:wiejetzt: Ja, wo ist denn hier sowas wie FileName oder so???

Na ja, Du hast da eine Record-Struktur im Speicher liegen. Die kannst Du doch sonstwo hin kopieren. In einen Stream, in eine Datei, wo auch immer.
In diesem Fall hast Du ja eine Palette mit 256 Einträgen. Wenn Du einen Stream hast, dann geht das so:
Delphi-Quellcode:
Stream.Write(lpPal^, SizeOf(TLogPalette) + 255 * SizeOf(TPaletteEntry));
Ich hoffe, das hilft.

Gruß
xaromz

Martin K 13. Mai 2006 16:12

Re: Icons mit Delphi erstellen
 
Mal gucken, werd mir mal irgendwas daraus basteln...

Ziel soll eben so etwas sein:
Delphi-Quellcode:
procedure LoadPalette(const FileName: String {*.dat}; var Palette: array of TColor);
procedure SavePalette(const FileName: String; const Palette: array of TColor);

Martin K 13. Mai 2006 16:34

Re: Icons mit Delphi erstellen
 
Okay, ich glaub ich check's langsam...

Die Palette ist also eine PLogPalette, ein Zeiger auf TLogPalette.

1. Frage:
Wie bekomme ich aus TLogPalette ein array[0..255] of TColor ?

2. Frage:
In dieser Zeile wird also die Palette geladen:
Delphi-Quellcode:
    lpPal^.palNumEntries :=
      GetSystemPaletteEntries(dc,
      0,
      256,
      lpPal^.palPalEntry);
Es wird allerdings die Systempalette geladen.
Wie kann ich hier die Palette aus einem Stream (Datei) laden?
GetPaletteEntries... und dann?


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:10 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz