Stampato Applicazione di impaginazione con immagini in C #

1

Sto lavorando a un'applicazione per aiutare a creare layout di pagine stampate (da inserire poi in uno script personalizzato per InDesign). Sto affrontando un problema riguardante il posizionamento delle immagini su una pagina. O una singola immagine può essere posizionata su una pagina o più immagini.

  • Se viene inserita una singola immagine, l'utente dovrebbe essere in grado di definire se è posizionata in alto al centro o al centro della pagina
  • se due immagini, l'utente definisce top / bottom o left / right - anche se top / bottom avrebbe molto senso per due immagini di ritratto, quindi mi piacerebbe un modo per forzare left / right per portrait e viceversa per immagini di paesaggi
  • se tre immagini, l'utente definisce top / middle / bottom o left / center / right.

Questo è abbastanza semplice, ma voglio introdurre la capacità di definire i layout basati sulla griglia. Cioè, forse un'immagine in alto a piena larghezza, con un'immagine sinistra / destra sotto e così via.

Ho difficoltà a immaginare l'approccio migliore per farlo.

Al momento, ho un oggetto PhotoPage , con una matrice di Image s, che ha un enumerazione di posizionamento per ogni immagine, tuttavia questo cade a pezzi per i layout basati sulla griglia. Speravo che qualcuno potesse chiarire meglio la soluzione di questo problema di posizionamento, oltre a calcolare la geometria esatta per ogni immagine e inviarla allo script InDesign.

    
posta user3791372 07.05.2016 - 11:39
fonte

2 risposte

1

Guarda come è fatto il layout della finestra, per esempio, in WPF, perché è fondamentalmente ciò che stai cercando di risolvere da zero.

Hai diverse opzioni di contenitore con diverse strategie di layout: StackPanel con orientamento orizzontale o verticale, GridPanel con celle di dimensioni fisse o dinamiche, DockPanel con il suo approccio "inizio da bordo, riempimento e centro".

La tua applicazione dovrebbe solo tenere traccia del gestore di layout scelto, un elenco di immagini da inserire, forse alcuni "suggerimenti di layout".

Nota a margine: hai scritto (la mia enfasi):

so I'd like a way to enforce left/right for portrait and vice versa for landscape images

Per favore no. Mostra un'anteprima delle opzioni di layout attualmente selezionate, utilizza interruttori chiaramente visibili per scegliere tra gli orientamenti, ma lascia la scelta all'utente.

    
risposta data 07.05.2016 - 14:45
fonte
0

Le tue prime tre opzioni sono solo casi speciali di griglie. Il primo è semplicemente una griglia con una riga e una colonna, la seconda una griglia con due righe e una colonna o viceversa, e la terza una griglia con tre righe e una colonna. Quello che devi tenere traccia qui è

  • il tipo di griglia (numero di righe / colonne)

  • in quale cella della griglia verrà inserita l'immagine

  • l'allineamento orizzontale o verticale di ogni immagine all'interno di una cella (sinistra / centro / destra, alto / medio / basso)

Se si utilizza tale datastructure per il proprio layout, sarà facilmente estensibile da altri tipi di griglia. È sufficiente consentire altri tipi di configurazioni di griglia, ad esempio le griglie in cui ogni riga potrebbe contenere un numero diverso di colonne o griglie con celle "n x m".

Un'altra variante di questo approccio è di consentire solo griglie "n x 1" o "1 x m", ma per consentire ricorsivamente celle di griglia che contengono altre griglie.

Quale di queste varianti sarà la migliore per il tuo caso dipende dal tipo di griglie necessarie e da come vuoi calcolare e ridimensionare le dimensioni.

    
risposta data 07.05.2016 - 15:13
fonte

Leggi altre domande sui tag