Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Convertire un immagine metafile in un jpg
lunedì 17 novembre 2008 - 11.14
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
ilario
Profilo
| Senior Member
309
messaggi | Data Invio:
lun 17 nov 2008 - 11:14
ciao
ho un'immagine metafile
dim pages as printing.previewpageinfo()
pages(i).image 'questa è un immagine metafile come posso convertirla in un jpg
potrei salvarla con
pages(i).image .save(nomefile, imageformat),
ma vorrei evitare di salvarla su disco è possibile salvarla solo in memoria per poi eliminarla con un .dispose
grazie
ilario
0v3rCl0ck
Profilo
| Guru
1.120
messaggi | Data Invio:
lun 17 nov 2008 - 11:17
>ciao
Ciao
>
>ho un'immagine metafile
>
>dim pages as printing.previewpageinfo()
>
>pages(i).image 'questa è un immagine metafile come posso
>convertirla in un jpg
>
>potrei salvarla con
>
> pages(i).image .save(nomefile, imageformat),
>
>ma vorrei evitare di salvarla su disco è possibile salvarla
>solo in memoria per poi eliminarla con un .dispose
Potresti utilizzare un MemoryStream:
http://msdn.microsoft.com/en-us/library/system.io.memorystream.aspx
http://msdn.microsoft.com/en-us/library/system.io.memorystream_members.aspx
>
>grazie
>ilario
>
Enjoy It
- Michael -
http://blogs.dotnethell.it/Regulator/
ilario
Profilo
| Senior Member
309
messaggi | Data Invio:
lun 17 nov 2008 - 12:07
<Potresti utilizzare un MemoryStream:
pages(i).image .save(nomefile, imageformat),
ho dato un'occhiata a MemoryStream.write se non ho capito male
scrive in memoria una stringa o..... e poi la posso rileggere,
il mio problema è che non so come è composta la stringa
questa riga
pages(i).image .save(nomefile, imageformat),
mi trasforma e salva l'immagine nel formato che voglio
ma come faccio a passagli MemoryStream
per convertire un'immagine ho trovato la classe
imageconverter.convertto ma non riesco a capire come funzioni come dire di trasformarlo in jpg o..
0v3rCl0ck
Profilo
| Guru
1.120
messaggi | Data Invio:
lun 17 nov 2008 - 12:18
>
>
><Potresti utilizzare un MemoryStream:
>
>pages(i).image .save(nomefile, imageformat),
>
>ho dato un'occhiata a MemoryStream.write se non ho capito male
>scrive in memoria una stringa o..... e poi la posso rileggere,
>
>il mio problema è che non so come è composta la stringa
No, ci puoi salvare quello che vuoi, è uno stream di byte in memoria.
>
>questa riga
>
>pages(i).image .save(nomefile, imageformat),
>mi trasforma e salva l'immagine nel formato che voglio
>ma come faccio a passagli MemoryStream
>
Puoi utilizzare Image.Save Method (Stream, ImageFormat)
Image.Save(MemoryStream, ImageFormat.Jpg)
http://msdn.microsoft.com/en-us/library/ms142147.aspx
http://msdn.microsoft.com/en-us/library/system.drawing.imaging.imageformat_members.aspx
- Michael -
http://blogs.dotnethell.it/Regulator/
ilario
Profilo
| Senior Member
309
messaggi | Data Invio:
lun 17 nov 2008 - 15:28
ti ringrazio sono riuscito ho fatto cosi
Dim pages As Printing.PreviewPageInfo() = controller.GetPreviewPageInfo()
Dim IndexPag As Integer
Try
PdfWriter.GetInstance(document, New FileStream(SaveFileDialog1.FileName, FileMode.Create))
document.Open()
Dim immaginestream As MemoryStream = New MemoryStream
For IndexPag = 0 To pages.Length - 1
pages(IndexPag).Image.Save(immaginestream, System.Drawing.Imaging.ImageFormat.Jpeg)
immaginestream.Position = 0
Dim bufferimagine(immaginestream.Length) As Byte
immaginestream.Read(bufferimagine, 0, bufferimagine.Length)
Dim pdfimage As Image = iTextSharp.text.Image.GetInstance(bufferimagine)
document.Add(pdfimage)
immaginestream.Close()
immaginestream.Dispose()
Next IndexPag
Catch de As DocumentException
ShowMessage(de.Message, "Erore", MessageBoxButtons.OK, frmMessaggioBox.mIcon.mStop)
End Try
document.Close()
l'unico problema che mi rimane è che l' imagine è veramente grande oltre le misure del foglio, questo penso che dipenda dalla conversione, sai se esiste un modo per poterla comprimerla?
0v3rCl0ck
Profilo
| Guru
1.120
messaggi | Data Invio:
lun 17 nov 2008 - 15:57
>l'unico problema che mi rimane è che l' imagine è veramente grande
>oltre le misure del foglio, questo penso che dipenda dalla conversione,
>sai se esiste un modo per poterla comprimerla?
>
Cioè vorresti ridimensionarla?
- Michael -
http://blogs.dotnethell.it/Regulator/
ilario
Profilo
| Senior Member
309
messaggi | Data Invio:
lun 17 nov 2008 - 16:05
come vedi ho usato printdocument
quando mi salva la pagina in jpeg, le dimensioni del file , non corrispondono alle dimensioni effettive della carta
esempio ho salvato una stampa a4 e le dimensioni dell'immagine sono 4801x 7197 889kb capisci che ci posso fare un poster
come posso fare?
0v3rCl0ck
Profilo
| Guru
1.120
messaggi | Data Invio:
lun 17 nov 2008 - 16:20
>come vedi ho usato printdocument
>
>quando mi salva la pagina in jpeg, le dimensioni del file , non
>corrispondono alle dimensioni effettive della carta
>
>esempio ho salvato una stampa a4 e le dimensioni dell'immagine
>sono 4801x 7197 889kb capisci che ci posso fare un poster
>
>come posso fare?
Ma questo per colpa dell'immagine che è effettivamente è grande?
In questo post, secondo me, puoi trovare utili informazioni per eseguire un resize di una immagine:
http://bytes.com/forum/thread47008.html
Enjoy It
- Michael -
http://blogs.dotnethell.it/Regulator/
ilario
Profilo
| Senior Member
309
messaggi | Data Invio:
mar 18 nov 2008 - 17:34
ciao ho risolto con una funzione ricavaimmagine
mi restituisce byte dell'immagine salvate nel formato e ridotta nelle dimensioni che ho bisogno, così facendo la inserisco poi nel pdf e in un secondo è pronto
sicuramente è da sistemare e migliorare, ma almeno funziona ed è veloce
grazie mille del tuo aiuto
Private Sub pulPdf_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles pulPdf.Click
SaveFileDialog1.FileName = DocumentoPrint.DocumentName
SaveFileDialog1.Filter = "File pdf|*.PDF"
SaveFileDialog1.FilterIndex = 1
SaveFileDialog1.Title = "Salva Conto come Pdf"
SaveFileDialog1.OverwritePrompt = False
If SaveFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
Dim controller As New Printing.PreviewPrintController
controller.UseAntiAlias = False
DocumentoPrint.PrintController = controller
DocumentoPrint.Print()
Dim pages As Printing.PreviewPageInfo() = controller.GetPreviewPageInfo()
Dim IndexPag As Integer
Dim pageSizePdf As iTextSharp.text.Rectangle = New iTextSharp.text.Rectangle(DocumentoPrint.DefaultPageSettings.PaperSize.Width, DocumentoPrint.DefaultPageSettings.PaperSize.Height)
Dim DocumentPdf As Document = New iTextSharp.text.Document(pageSizePdf) 'pdf
'controlla se landscape = true ruota
If DocumentoPrint.DefaultPageSettings.Landscape = True Then DocumentPdf.PageSize.Rotate()
Try
'nuovo file pdf e inserisci i dati del file autore ecc...
PdfWriter.GetInstance(DocumentPdf, New FileStream(SaveFileDialog1.FileName, FileMode.Create))
DocumentPdf.AddTitle(DocumentoPrint.DocumentName)
'DocumentPdf.AddSubject(DocumentoPrint.DocumentName)
'DocumentPdf.AddCreator("My ")
DocumentPdf.AddAuthor("autore")
DocumentPdf.Open()
For IndexPag = 0 To pages.Length - 1
'inserisci immagine nel pdf
Dim pdfimage As iTextSharp.text.Image
pdfimage = iTextSharp.text.Image.GetInstance(RicavaImmagineByte(pages(IndexPag).Image, DocumentoPrint.DefaultPageSettings.PaperSize.Height, DocumentoPrint.DefaultPageSettings.PaperSize.Width, CmPx.Pixel, 300, DocumentoPrint.DefaultPageSettings.Landscape, System.Drawing.Imaging.ImageFormat.Jpeg))
pdfimage.SetAbsolutePosition(0, 0)
DocumentPdf.Add(pdfimage)
If IndexPag < pages.Length - 1 Then
DocumentPdf.NewPage()
End If
Next IndexPag
Catch de As DocumentException
ShowMessage(de.Message, "Erore", MessageBoxButtons.OK, frmMessaggioBox.mIcon.mStop)
End Try
If DocumentPdf.IsOpen = True Then
DocumentPdf.Close()
End If
End If
End Sub
Private Function RicavaImmagineByte(ByVal Immagine As Drawing.Image, ByVal Altezza As Integer, ByVal larghezza As Integer, ByVal MmoPixel As CmPx, ByVal Dpi As Integer, ByVal landscape As Boolean, ByVal FormatoImmagine As System.Drawing.Imaging.ImageFormat) As Byte()
If landscape = True Then
Dim AltezzaLarghezza As Integer = 0
AltezzaLarghezza = Altezza
Altezza = larghezza
larghezza = AltezzaLarghezza
End If
If MmoPixel = CmPx.Cm Then
Altezza = Altezza / 2.54 * Dpi
larghezza = larghezza / 2.54 * Dpi
End If
Dim ImmagineStream As MemoryStream = New MemoryStream
Dim nuova_immagine As New Bitmap(larghezza, Altezza)
Dim temp As Graphics = Graphics.FromImage(nuova_immagine)
temp.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic
temp.DrawImage(Immagine, New Drawing.Rectangle(0, 0, larghezza, Altezza), New Drawing.Rectangle(0, 0, Immagine.Width, Immagine.Height), GraphicsUnit.Pixel)
nuova_immagine.Save(ImmagineStream, FormatoImmagine)
ImmagineStream.Position = 0
Dim bufferimmagine(ImmagineStream.Length) As Byte
ImmagineStream.Read(bufferimmagine, 0, bufferimmagine.Length)
RicavaImmagineByte = bufferimmagine
'riliasciare gli oggetti caricati in memoria
temp.Dispose()
ImmagineStream.Dispose()
nuova_immagine.Dispose()
End Function
grazie mille
ilario
0v3rCl0ck
Profilo
| Guru
1.120
messaggi | Data Invio:
mar 18 nov 2008 - 17:46
Benone, bravo
Sono contento di esserti stato di aiuto
Alla prossima...
Ciaoooo
- Michael -
http://blogs.dotnethell.it/Regulator/
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !