Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [VB.NET] Problema sovrapposizione immagini usando Graphics.DrawImage
Forum - C# / VB.NET - [VB.NET] Problema sovrapposizione immagini usando Graphics.DrawImage

Avatar
Mr SaJaN (Normal User)
Rookie


Messaggi: 22
Iscritto: 23/07/2007

Segnala al moderatore
Postato alle 1:47
Mercoledì, 16/06/2010
Salve a tutti, illustro brevemente cosa devo fare con l'applicazione in modo che sia più facile per tutti capirmi ^^

In poche parole ho centinaia di foto (immagini in formato jpeg) ogni fine weekend a cui applicare un watermark in basso a destra (il watermark è un'immagine jpeg). Quello che vorrei fare è un programmino che mi automatizzi tutto, apre una ad una tutte le immagini di una cartella, applica il watermark e le salva..

Il problema sta nel fatto che proprio non ci riesco -.-
Ho cercato in rete degli esempi di codice ma o non funzionano oppure non fanno al caso mio..

Il programma deve fare una cosa tipo:
1. prendere le immagini da una cartella
2. prendere l'immagine del watermark
3. sovrapporle alle coordinate desiderate
4. salvare l'immagine in una nuova jpeg

Più o meno ho capito come sovrapporre le due immagini, solo che non so come vedere il lavoro non riuscendo a salvare e quindi non so se sto facendo giusto o se ho lavorato 2 ore per niente :)

Questo è il codice che sono riuscito a trovare e che non mi da errori, ma non posso testare se funziona perchè non ho la più pallida idea di come avere un output dell'immagine che vado a creare:
Codice sorgente - presumibilmente VB.NET

  1. Dim punto1 As New Point
  2.         Dim punto2 As New Point
  3.         Dim img1 As Bitmap = New Bitmap(WaterMark.Image)
  4.         Dim imgBg As Bitmap = New Bitmap(ImmagineAperta.Image)
  5.  
  6.         punto2 = New Point(10, 10)
  7.         e.Graphics.DrawImage(imgBg, punto2)
  8.         punto1 = New Point(1, 25)
  9.         e.Graphics.DrawImage(img1, punto1)


Sono abbastanza convinto che ci sia poco di giusto in questo codice quindi chiedo aiuto a voi, spero che possiate aiutarmi e risparmiarmi 4 ore di strazio al giorno per applicare il watermark ad ogni immagine una ad una :-| :-| :-| :-| :-|

Grazie mille ;)

PM Quote
Avatar
walker93 (Member)
Expert


Messaggi: 460
Iscritto: 31/01/2010

Segnala al moderatore
Postato alle 10:28
Mercoledì, 16/06/2010
beh
il concetto di graphics è corretto.
il tuo codice non proprio...
se vuoi vedere il risultato prima di salvare l'immagine devi inserire una picturebox e mostrare li l'immagine creata con graphics
per salvarla c'è una funzione apposita dentro graphics.

io strutturerei il tutto in questo modo:
-una picturebox dove è contenuta l'immagine alla quale viene applicato il watermark
-un bottone che richiama un FolderBrowserDialog
-il FolderBrowserDialog che sceglie la cartella contenente tutte le immagini
-lista contenente il percorso di ogni immagine
-pulsante salva per salvare l'immagine e quando è salvata mostra la successiva nella picturebox
-pulsante salva tutte per salvarle tutte insieme
opzionali:
- bottone per mostrare altro FolderBrowserDialog
- FolderBrowserDialog per scegliere cartella di salvataggio

Codice sorgente - presumibilmente VB.NET

  1. ' carico tutte le immagini in una lista
  2.         FolderBrowserDialog1.ShowDialog()
  3.         For Each file In IO.Directory.GetFiles(FolderBrowserDialog1.SelectedPath, "*.jpg")
  4.             immagini.Add(Image.FromFile(file))
  5.         Next
  6.  'per ogni immagine nella lista...
  7.         For Each imm In immagini
  8.             '...
  9.         Next


Ultima modifica effettuata da walker93 il 16/06/2010 alle 11:05


Il software è come il sesso, è meglio quando è libero.
Linus Torvalds, Conferenza della Free Software Foundation, 1996 (attribuito)

Non provare mai a spiegare il computer a un profano. È più facile spiegare il sesso a una vergine.
Robert Anson Heinle
PM Quote
Avatar
Mr SaJaN (Normal User)
Rookie


Messaggi: 22
Iscritto: 23/07/2007

Segnala al moderatore
Postato alle 12:17
Mercoledì, 16/06/2010
Sono riuscito a modificare il codice per farlo funzionare correttamente, se può servire a qualcuno:

Codice sorgente - presumibilmente VB.NET

  1. Public Sub Sovrapponi()
  2.         Dim punto1 As New Point
  3.         'imposto come watermark un'immagine caricata in un picturebox
  4.         Dim ImgWatermark As Bitmap = New Bitmap(WaterMark.Image)
  5.         'imposto come immagine di sfondo una foto caricata in un picturebox
  6.         Dim IMG As Graphics = Graphics.FromImage(ImmagineAperta.Image)
  7.  
  8.         'seleziono le coordinate di inserimento dell'immagine
  9.         punto1 = New Point(1, 25)
  10.         'disegno il watermark nella foto
  11.         IMG.DrawImage(ImgWatermark, punto1)
  12.         'salvo l'immagine creata
  13.         IMG.Save()
  14.  
  15.         'salvo l'immagine nel file e nel formato specificato
  16.         ImmagineAperta.Image.Save("F:\TEST.jpg", ImageFormat.Jpeg)
  17.  
  18.     End Sub



è necessario importare System.Drawing.Imaging e richiamare da un semplice bottone la funzione Sovrapponi() ;)

ora piano piano mi faccio la funzione per prendere tutte le foto da una cartella e applicare il watermark a tutte, ma dovrebbe essere facile ^^

PM Quote
Avatar
walker93 (Member)
Expert


Messaggi: 460
Iscritto: 31/01/2010

Segnala al moderatore
Postato alle 12:52
Mercoledì, 16/06/2010
Testo quotato

Postato originariamente da Mr SaJaN:

ora piano piano mi faccio la funzione per prendere tutte le foto da una cartella e applicare il watermark a tutte, ma dovrebbe essere facile ^^


ti ho già postato il codice per farlo...
ricordati che immagini è di tipo list(of image)
e che devi aggiungere il controllo folderbrowserdialog

Ultima modifica effettuata da walker93 il 16/06/2010 alle 12:54


Il software è come il sesso, è meglio quando è libero.
Linus Torvalds, Conferenza della Free Software Foundation, 1996 (attribuito)

Non provare mai a spiegare il computer a un profano. È più facile spiegare il sesso a una vergine.
Robert Anson Heinle
PM Quote
Avatar
Mr SaJaN (Normal User)
Rookie


Messaggi: 22
Iscritto: 23/07/2007

Segnala al moderatore
Postato alle 13:31
Mercoledì, 16/06/2010
lol.. stavo leggendo il forum dall'iphone e non avevo notato il codice che mi avevi incollato :D

comunque ci sono riuscito, ora selezionando la cartella e il watermark lo applica a tutti i jpg all'interno della cartella, salvando poi tutte le foto in una nuova cartella ^^

do una sistemata al codice e poi lo posto a disposizione di tutti coloro che si inghipperanno qui come me :D

grazie mille per l'aiuto ;)

EDIT: se lo sfondo del watermark è trasparente, quando viene incollato sopra la foto resta trasparente? le prove le ho fatte con 2 immagini normali perchè ho tutto nel pc a lavoro :(

Ultima modifica effettuata da Mr SaJaN il 16/06/2010 alle 13:33
PM Quote
Avatar
walker93 (Member)
Expert


Messaggi: 460
Iscritto: 31/01/2010

Segnala al moderatore
Postato alle 18:32
Mercoledì, 16/06/2010
in via del tutto teorica si
tra 2 picturebox è possibile, non so tra immagini,ma credo di si


Il software è come il sesso, è meglio quando è libero.
Linus Torvalds, Conferenza della Free Software Foundation, 1996 (attribuito)

Non provare mai a spiegare il computer a un profano. È più facile spiegare il sesso a una vergine.
Robert Anson Heinle
PM Quote