Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Konvertierung YMCK mit ICC Profilen gesucht (https://www.delphipraxis.net/202112-konvertierung-ymck-mit-icc-profilen-gesucht.html)

Rollo62 30. Sep 2019 11:24

Konvertierung YMCK mit ICC Profilen gesucht
 
Hallo zusammen,

für das Druck-Vorbereiten mit ICC Farbprofilen suche ich eine kleine Delphi-Lösung.
Die muss nicht unbedings Alle Features haben aber einfaches Kopieren von dem Farbraum eines
Kameraphotos (Mobilphone-Kamera) in einen YMCK Farbraum, zur Erstellung von Druckdaten (JPG, TIFF mit YMCK).

Ich denke eine einfache RGB zu YMCK Formel reicht den Druckern heutzutage nicht mehr aus,
denn das Ergebnis sollte schon einigermassen Farbecht sein.

Ich habe ImageEN und Leadtools gefunden, die dafür was anbieten (scheint aber auch eher rudimentär).
Es gibt auch sowas wie LittleCMS, das basiert aber auf C, scheint aber recht gut mit solchen Konvertierungen umgehen zu können.

Ich bin einigermaßen verwundert das anscheinend auch Gimp nicht mit CMYK Profilen umgehen kann,
erst mit einem zusätzlichen Plugin Separate+ wird da was gefriemelt.
Eigentlich sollte Gimp doch Druckdaten ohne Probleme erzeugen können, als Photoshop-Alternative.

Hat jemand Erfahrung mit der CMYK ICC Profilen im Delphi ?
Wenn mögich in Delphi, also nicht unbedingt das Einbinden externer DLL, wäre aber auch als zweitbeste Lösung in Ordnung.
Für ein paar Tipps zu einer guten Komponente wäre ich dankbar (womöglich gibt es auch Freeware).

sakura 30. Sep 2019 11:41

AW: Konvertierung YMCK mit ICC Profilen gesucht
 
Ich würde Dir empfehlen, dass bereits von Dir genannte, https://www.imageen.com/info/index.html zu testen. Mit denen habe ich vor längerer Zeit schon gute Erfahrungen im Bereich ICC gemacht. CMYK brauchte ich damals nicht.

...:cat:...

Rollo62 30. Sep 2019 13:16

AW: Konvertierung YMCK mit ICC Profilen gesucht
 
Dankesehr für die Info.
Ich hatte mir das schon angesehen, aber das wären dann 400 USD nur für die Konvertierungsfunktion, weil ich den ganzen Rest der Library eigentlich nicht unbedingt brauche.
Ich hoffe noch das es da einen günstigeren Weg gibt.

Zumindest weiss ich jetzt das die ICC-Profil Funktion bei Dir schonmal in Ordnung war.

Rollo62 1. Okt 2019 07:22

AW: Konvertierung YMCK mit ICC Profilen gesucht
 
Es scheint da wohl nicht viel zu geben im Delphiland.

Eine Möglichkeit wäre auch noch ImageMagick, das wird wohl generall auch für PHP und OnlineConverter genutzt.
Das wäre zumindest auch von Delphi aus steuerbar.
Ich habe aber auch einige negative Kommentare gefunden hinsichtlich des Ergebnisses.

Vielleicht hat jemand Erfahrung damit bei der Umwandlung von Kamerabildern von sRGB in YMCK ?
Ich suche eine möglichst generelle Lösung, die am Besten automatisch akzeptable Konvertierungen des Farbraums machen kann.
Leichte Farbänderungen wären zu verschmerzen.

Jasocul 1. Okt 2019 07:58

AW: Konvertierung YMCK mit ICC Profilen gesucht
 
Ich habe keine praktische Erfahrung (außer mit Photoshop), aber wenn ich mir diesen Link ansehe und den darauf folgenden Abschnitt, sieht es nicht so kompliziert aus.

sakura 1. Okt 2019 09:23

AW: Konvertierung YMCK mit ICC Profilen gesucht
 
Zitat:

Zitat von Jasocul (Beitrag 1448602)
Ich habe keine praktische Erfahrung (außer mit Photoshop), aber wenn ich mir diesen Link ansehe und den darauf folgenden Abschnitt, sieht es nicht so kompliziert aus.

Allerdings berücksichtigt die Anleitung überhaupt keine ICC-Profile, aber darin liegt die Kunst ;-)

...:cat:...

HolgerX 1. Okt 2019 09:56

AW: Konvertierung YMCK mit ICC Profilen gesucht
 
Hmm..

Google... 'Delphi ICC-Profile'


http://www.littlecms.com/
https://github.com/mm2/Little-CMS

Wenn ich dies richtig verstehe, ist es eine color management engine, welche mit ICC Profilen die Bilderdarstellung konvertiert..

Open Source...

mit dem Beispiel:

https://github.com/mm2/Little-CMS/tr...r/utils/delphi


Edit:
Noch nen Link hierzu:
http://www.delphigroups.info/2/7/322170.html

Rollo62 1. Okt 2019 11:49

AW: Konvertierung YMCK mit ICC Profilen gesucht
 
Hallo HolgerX,

super, das LittleCMS hatte ich ja schon angesehen, aber das darin auch ein Delphi-Projekt ist hatte ich nicht auf dem Schirm.
Interessant.

Eingentlich hatte ich die Hoffnung auf eine Pascal-Lösung (ohne C-DLL), aber das ist zumindest eine Option für mich.

Arbeitet denn jemand mit LittleCMS, ich frage mich wie die PErformance und Funktion von
LittleCMS vs. ImageMagick vs. XYU ist, damit ich nicht mit der falschen Lösung anfange.

@Jasocul
Dankesehr für den Link.
Ja das es solche Formeln gibt hatte ich schon geschrieben, die nutzen aber wenig wenn die Druckerei ICC-Profile braucht für die Verarbeitung.
Ich wollte jetzt nicht erst austesten wie die Ergebnisse aussehen, sonder hoffe das ich gleich auf Anhieb eine akzeptable Lösung finden kann.

Vermutlich muss man aber selbst mit Photoshop ein paar Proofs bei der Druckeri machen lassen um das richtig einzustellen.
Genau diese Proofs möchte (kann) ich bei meiner Applikation nicht machen, sonder es muss direkt in guter Qualität und einigermaßen richtiger Farbe rauskommen.

Raible 1. Okt 2019 15:30

AW: Konvertierung YMCK mit ICC Profilen gesucht
 
ich arbeite mit Little-CMS, und bin soweit zufrieden.

Eine Delphi Schnittstelle (lcms2dll.pas) ist wie
bereits erwähnt enthalten.

CMYK Konvertierung habe ich allerdings noch nicht durchgeführt,
ist aber sicher möglich. (cmsSigCmykData)

Im übrigen könnte ich mir gut vorstellen,
dass ImageMagic, ImageEN... intern Little-CMS verwenden.

Rollo62 1. Okt 2019 15:48

AW: Konvertierung CMYK mit ICC Profilen gesucht
 
Zitat:

Zitat von Raible (Beitrag 1448672)
ich arbeite mit Little-CMS, und bin soweit zufrieden.

Danke auch für die Einschätzung.
Ich arbeite wohl noch nicht so lange mit CMYK, deshalb der Dreher im Titel :oops:
Kann ich aber leider nicht mehr editieren, oder doch (Moderatoren ?).

Ich habe gerade etwas mit LittleCMS herumgespielt, und sogar geschafft die DLL mit RadStudio zu kompilieren (Bin mir aber nicht ganz sicher ob das auch 100% klappt).
Jedenfalls kann ich die DLL Funktionen aufrufen, und sogar darin debuggen (so sollte es sein),
der unterstützte Compiler ist aber nur der freie BC5.5.

Mit dem Demo habe ich auch herumgespielt, aber das scheint gar nicht zur Konvertierung aller Profile zu sein.
Der nimm sich die RGB Monitorprofile von Windows, und kann auch nur in RGB konvertieren.

Nach etwas Umbau kann er auch CYMK Profile konvertieren, dabei stürzt die DLL Funktion aber ab.
Delphi-Quellcode:
      xform := cmsCreateTransform(hSrc, TYPE_BGR_8,
                                  hDest,
//                                  TYPE_BGR_8,
                                  TYPE_CMYK_8 , //<== mal versucht ob das läuft :-(
                                  Intent,
Das läuft leider out-of-the-box anscheinend nicht so problemlos.
Es könnte aber daran liegen das man bei CMYK auch eine Farbseparierung in vier Kanäle machen muss, und das es deshalb natürlich nicht in ein Bitmap passt.

Es könnte natürlich auch an der DLL an sich liegen, hast Du eine Quelle wo man die sicher runterladen kann für Win64 ?

Raible 1. Okt 2019 19:07

AW: Konvertierung YMCK mit ICC Profilen gesucht
 
zeig doch mal wie hSrc und hDest erzeugt wurden.

Wie wendest Du cmsDoTransform an, und wie werden
die Src und Dst Bitmaps erzeugt?

Was genau ist eigentlich Deine die Zielsetzung?
a) eine Ausgabedatei im Format CMYK für die Druckerei zu erzeugen, oder
b) auf dem Bildschirm das korrekt darstellen was die Druckerei letzten Endes erzeugt ?

Rollo62 2. Okt 2019 08:47

AW: Konvertierung YMCK mit ICC Profilen gesucht
 
Ich habe das Demo 1:1 übernommen.
Nur als Output-Profile ein CMYK (wie z.B. CoatedFOGRA39.icc) genommen:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Source, Dest: String;
  hSrc, hDest: cmsHPROFILE;
  xform: cmsHTRANSFORM;
  i, PicW, PicH: Integer;
  Intent: Integer;
  dwFlags: DWORD;
begin

  Source := SelectedFile(ComboBoxInput);
  Dest := SelectedFile(ComboBoxOutput);

  dwFlags := ComputeFlags;

  Intent := IntentCodes[ComboBoxIntent.ItemIndex];

  cmsSetAdaptationState(  ScrollBar1.Position / 100.0 );

  if (Source <> '') AND (Dest <> '') then
  begin
    hSrc := cmsOpenProfileFromFile(PAnsiChar(AnsiString(Source)), 'r');
    hDest := cmsOpenProfileFromFile(PAnsiChar(AnsiString(Dest)), 'r');

    if (hSrc <> Nil) and (hDest <> Nil) then
    begin
      xform := cmsCreateTransform(hSrc, TYPE_BGR_8,
                                  hDest,
//                                  TYPE_BGR_8,
                                  TYPE_CMYK_8 , //<====
                                  Intent,
        dwFlags);
    end
    else
    begin
      xform := nil;
    end;

    if hSrc <> nil then
    begin
      cmsCloseProfile(hSrc);
    end;

    if hDest <> Nil then
    begin
      cmsCloseProfile(hDest);
    end;

    if (xform <> nil) then
    begin

      PicW := Image2.Picture.width;
      PicH := Image2.Picture.height;
      ProgressBar1.Min := 0;
      ProgressBar1.Max := PicH;
      ProgressBar1.Step := 1;

      for i := 0 TO (PicH - 1) do
      begin
        if ((i MOD 100) = 0) then
          ProgressBar1.Position := i;

        cmsDoTransform(xform, Image1.Picture.Bitmap.Scanline[i],
          Image2.Picture.Bitmap.Scanline[i], PicW);

      end;
      ProgressBar1.Position := PicH;

      cmsDeleteTransform(xform);

    end;

    Image2.Repaint;
    ProgressBar1.Position := 0;
  end
end;
Ja, das Ziel ist es
a.) eine druckfertige Ausgabedatei zu erzeugen (am Besten kein JPG, weil mache Druckereien das ablehnen).
b.) einen Softproof zu machen wäre auch Interessant, weil anscheinend alle OpenSource- Lösungen damit nur schwer klarkommen.

Ich denke auch das die im Beispiel benutzte TImage nicht sinnvoll ist, denn die kann ja nur RGB anzeigen.
Was ich brauche ist ein File mit den richtigen Daten.

Ich suche da noch die passenden Tools, weil ich im Prozess komplett auf Adobe verzichten möchte.

Ich beschäftige mich gerade auch mit ImageMagick zur Konvertierung, und habe da z.B. folgendes Script getestet
Code:
echo . Convert to TIF - stripped with %ICC_IN% to %ICC_OUT%
%PATH_PAR%\convert "%1" -strip -profile %ICC_IN%  -intent relative -black-point-compensation -profile %ICC_OUT% out_cmyk_s1.tiff
Das File wird zwar von JPG 22MB auf TIF 230MB vergrößert, aber ich bin mir noch nicht sicher ob dies nur wirklich die 4 Farbkanäle enthält.

Mit LittleCMS habe ich so ein Ergebnis noch nicht hinbekommen.

Raible 2. Okt 2019 19:13

AW: Konvertierung YMCK mit ICC Profilen gesucht
 
Das Ziel Bitmap muss natürlich ein 32Bit Format aufweisen.
Bitmap.PixelFormat:=pf32bit;
zur Sicherheit noch Bitmap.HandleType:=bmDIB;

Eine 32Bit Bitmap wird aber normalerweise als RGBA interpretiert.
Wobei A der Alpha Kanal(Transparenz) darstellt.

CMYK kann so nicht direkt angezeigt werden. Das muss
zuvor nach RGB (zurück) konvertiert werden.

Im Übrigen würde ich keine TImage Komponenten sondern direkt
TBitmap verwenden.

Rollo62 4. Okt 2019 12:45

AW: Konvertierung YMCK mit ICC Profilen gesucht
 
Danke für den Tipp, ich werde es damit nochmal versuchen.
Ja das vor- rückkonvertieren ist klar, ich bin mir da dann aber trotzdem nicht sicher ob
die Anzeige noch dem entspricht was ich eingegeben habe.

Kennst Du eventuell ein gutes Test und Anzeigetool, mit dem man alle möglichen Bilder prüfen und anzeigen kann (ausserhalb der Adobe-Welt) ?
Könnte sein das Mac da etwas hat, z.B. das "ColorSync" Dienstprogramm, aber
alle diese Tools helfen anscheinend nur bei einem kleinen Teil des ganzen Workflows.

Raible 4. Okt 2019 15:11

AW: Konvertierung YMCK mit ICC Profilen gesucht
 
Affinity Photo könnte ein Blick wert sein.
Ist zwar nicht kostenlos aber für die gebotene Leistung sehr günstig


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:16 Uhr.

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