Oppure

Loading
11/08/22 2:40
bernie
Salve a tutti , avendo un file TIFF , spazio colore cmyk avrei bisogno di creare 5 file uno per ogni componente , quindi 1 file per il cyan, 1 per il magenta, 1 per il giallo e 1 per il nero .
Qualche suggerimento su cosa iniziare a guardare?
Grazie Bernie
aaa
11/08/22 21:22
Carlo
La vedo dura, qualsiasi immagine carichi in .Net, viene convertita in RGB.
Forse hai una possibilità se le immagini Tiff, sono salvate senza compressione e livelli, le carichi con StreamReader e poi esegui una conversione pixel a pixel.

Ho trovato questa discussione: comp.graphics.algorithms.narkive.com/Hz4wAekG/…

Dove viene proposto un codice in C#, ma ti dico subito che il risultato da RGB a CMYK non corrisponde per il motivo sopraesposto e contestato anche dallo stesso autore della domanda:

Il codice in C# nella discussione, qui il codice convertito in VB.Net
        ' Begin code segment. 

        ' Load the TIFF image; details don't matter. 
        Dim bmp As Bitmap = CType(System.Drawing.Bitmap.FromFile("CampioneCMYK.tif"), Bitmap)
        ' Create a bunch of bitmaps, one for each color in CMYK. 
        Dim bmpC As New Bitmap(bmp), bmpM As New Bitmap(bmp), bmpY As New Bitmap(bmp), bmpK As New Bitmap(bmp)
        ' These hold our color values. 
        Dim c, d As Color
        ' Position in image. 
        Dim x, y As Integer

        ' CMYK values according to the algorithm listed at the second Google
        'search site. 
        Dim vc, vm, vy, vk As Single

        ' Scan-line the image. 
        For y = 0 To bmp.Height - 1
            For x = 0 To bmp.Width - 1
                c = bmp.GetPixel(x, y)

                ' Convert from RGB to CMYK. 
                vc = 255.0F - c.R
                vm = 255.0F - c.G
                vy = 255.0F - c.B
                If (vc = 255.0F) AndAlso (vm = 255.0F) AndAlso (vy = 255.0F) Then
                    vc = 0.0F
                    vm = 0.0F
                    vy = 0.0F
                    vk = 255.0F
                Else
                    If vc < vm Then
                        vk = vc
                    Else
                        vk = vm
                    End If
                    If vk > vy Then
                        vk = vy
                    End If
                    vc = 255.0F * (vc - vk) / (255.0F - vk)
                    vm = 255.0F * (vm - vk) / (255.0F - vk)
                    vy = 255.0F * (vy - vk) / (255.0F - vk)
                End If
                ' Set colors in the individual CMYK in-memory images. 
                d = Color.FromArgb(CInt(Math.Truncate(vc)), CInt(Math.Truncate(vc)), CInt(Math.Truncate(vc)))
                bmpC.SetPixel(x, y, d)
                d = Color.FromArgb(CInt(Math.Truncate(vm)), CInt(Math.Truncate(vm)), CInt(Math.Truncate(vm)))
                bmpM.SetPixel(x, y, d)
                d = Color.FromArgb(CInt(Math.Truncate(vy)), CInt(Math.Truncate(vy)), CInt(Math.Truncate(vy)))
                bmpY.SetPixel(x, y, d)
                d = Color.FromArgb(CInt(Math.Truncate(vk)), CInt(Math.Truncate(vk)), CInt(Math.Truncate(vk)))
                bmpK.SetPixel(x, y, d)
            Next x
        Next y

        ' Save each CMYK image. 
        bmpC.Save("imageC.tif", System.Drawing.Imaging.ImageFormat.Tiff)
        bmpM.Save("imageM.tif", System.Drawing.Imaging.ImageFormat.Tiff)
        bmpY.Save("imageY.tif", System.Drawing.Imaging.ImageFormat.Tiff)
        bmpK.Save("imageK.tif", System.Drawing.Imaging.ImageFormat.Tiff)

        ' End of code segment.


Nell'immagine allegata a sinistra il risultato corretto realizzato con Photoshop, a destra il risultato sbagliato con il programma postato.

Sono interessato all'argomento, posta i tuoi progressi.
Ultima modifica effettuata da Carlo 11/08/22 21:26
in programmazione tutto è permesso
12/08/22 1:07
bernie
Ciao Carlo
La conversione da RGB a CMYK senza tenere conto del profilo porta solo rogne, sono pienamente d'accordo. La discussione che hai linkato penso che riguardi esattamente la mia domanda. Da quello che ho potuto capire, verso la fine di parla di usare una libreria non in automatico ma in maniera che non converta in RGB qualsiasi immagine viene caricata.
Adesso provo a vedere cosa trovo.

aaa
12/08/22 17:01
bernie
Ciao Carlo
stavo guardando questo, da quanto ho capito, questa libreria permette o di convertire in RGB i file caricati , oppure in RAW non li converte ma li lascia nello spazio colore originale .
github.com/BitMiracle/…
Magari se ci guardi anche tu è meglio .
Ciao Bernie
aaa
13/08/22 20:28
Carlo
Sembra che serva NET Core 3.1 e VS2022, attualmente non ho nessuno dei 2.

La libreria è completa, ma a te cosa serve?
I tiff li produci tu?
Puoi avvalerti di Photoshop?
in programmazione tutto è permesso
13/08/22 21:47
bernie
Così Carlo
I TIFF li ho da Photoshop, già nello spazio colore giusto e con il profilo incorporato. Devo solo dividerlo nei 4 colori base
aaa
14/08/22 10:27
Carlo
Servono per creare le lastre di stampa con tanto di retino?
La suddivisione che fa Photoshop non ti va bene?

Se salvi il tiff con nessuna compressione, nessun livello e profondità colore nota, il file diventa analizzabile per l'estrazione, i dati sono in chiaro.

Le 4 immagini risultanti ti vanno bene in bitmap a 256 livelli di grigio?

Sto cercando di capire per vedere se potresti attuare una scorciatoia, un Tiff può contenere di tutto e le variabili sono molteplici....
Ultima modifica effettuata da Carlo 14/08/22 10:36
in programmazione tutto è permesso
14/08/22 11:56
bernie
Più o meno, servono per creare i 4 file da passare alla stampa. Photoshop mi converte lo spazio colore, applica il profilo (e la linearizzazione) e salva un tiff CMYK.
Senza compressione, senza livelli.
Per quando riguarda i 256 livelli di grigio si, vanno bene, per il bitmap, dovrei provare.
aaa