Sandro Bizioli


Chi sogna di giorno conosce molte cose che sfuggono a chi sogna soltanto di notte. (E.A.Poe)
Home Blogs | Home | Login | Contact | My Profile | RSS | About | Cerca

Modificare il formato di un'immagine in VB.Net

Attraverso lo spazio dei nomi System.Drawing.Imaging è possibile specificare il formato di un'immagine.La classe è supportata in .Net Framework 3.0, 2.0, 1.1, 1.0 La funzione riportata accetta un oggetto Image ed una stringa indicante il nome completo del file dove salvare l'immagine nel formato scelto.La discriminazione del formato è data dell'estensione stessa del nome del file. Private Function SaveImage(ByVal img As Image, ByVal sFile As String) As Boolean'' Verifico di aver passato il nom 
Leggi tutto il post...
Categoria: VB.Net
giovedì, 20 set 2007 Ore. 10.35

Scrivi un commento

Nome:
Blog:
E-Mail:
(l'indirizzo e-mail non verrà pubblicato, consente di essere avvertiti quando arrivano nuovi commenti a questo Post)
Codice:
Corpo:
Cookie:

Commenti

Autore: GianniInviato il: 22 gen 2008 - 09.56
Riscontri dei problemi quando temto di salvare col formato EMF.

Ho creato un oggetto con la classe METAFILE.
Ho eseguito tutte le operazioni di disegno

Ho salvato l'immagine su file in formato emf attraverso il metodo Save.

Il programma restituisce il seguente errore:

"Value cannot be null.
Parameter name: encoder"

Sono andato a documentarmi in giro e sembrerebbe che .Net non suporti in scrittura il formato EMF e WMF.

http://support.microsoft.com/kb/316563

Inoltre sull'MSDN viene specificato che i METAFILE sono salvati in PNG. (vedi note)

http://msdn2.microsoft.com/it-it/library/system.drawing.imaging.metafile(VS.80).aspx

il problema è che la conversione da METAFILE (creato con formato EMF) a Png modifica tutte le dimensioni dell'immagine.

Come posso fare per salvare in EMF ?
Grazie
Autore: Sandro BizioliInviato il: 22 gen 2008 - 16.59
Ho visto i link che hai segnalato, ma sinceramente quando effettuo il salvataggio ad esempio in WMF non mi da errore.
Proverò ad informarmi accuratamente.
Grazie per la segnalazione.
Autore: GianniInviato il: 29 gen 2008 - 12.26
Io sto utilizzando Visual Studio 2005 Service Pack 1 con il FrameWork 2.0 Service Pack 1

Non so dirti se sulle versioni del FrameWork più recenti è stato risolto il problema (ma non mi risulta).
Comunque per vedere se hai effettivamente l'encoder EMF o WMF basta eseguire questo codice:

Dim encoders As Array = System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders
Dim text As String = ""
For i As Integer = 0 To encoders.Length - 1
text += DirectCast(encoders(i), ImageCodecInfo).CodecName + vbCrLf
Next
MsgBox(text)

a me da come risultato i seguenti encoder:
BMP, JPEG, GIF, TIFF, PNG

Al momento per riuscire a salvare in formato EMF, utilizzo 2 metodi della GDI32.DLL

Public Sub CreateMetafile()
' Creo il METAFIILE
Dim settings As New PrinterSettings
Dim DC As IDeviceContext = _
settings.CreateMeasurementGraphics(settings.DefaultPageSettings)
Dim EMFImage as New Metafile(DC.GetHdc, New Rectangle(0, 0, 21000, 29700), _
MetafileFrameUnit.GdiCompatible, EmfType.EmfPlusOnly)

' Creo il GRAPHICS dal METAFILE per poter disegnare
Dim Grph as Graphics = Graphics.FromImage(EMFImage)

Grph.DrawRectangle(Pens.Black, 100, 100, 100, 100)

' Rilascio il GRAPHICS altrimenti il METAFILE rimane in utilizzo
Grph.Dispose()
Grph = Nothing

' Salvo l'immagine su disco
Dim hEMF as IntPrt = EMFImage.GetHenhmetafile()
CopyEnhMetaFile(hEMF, "c:\TEST".EMF")

' Rilascio handle del METAFILE
DeleteEnhMetaFile(hEMF)

End Sub

<DllImport("gdi32.dll", EntryPoint:="CopyEnhMetaFileA", _
SetLastError:=True, ExactSpelling:=True, _
CallingConvention:=CallingConvention.StdCall)> _
Public Shared Function CopyEnhMetaFile(ByVal hemfSrc As IntPtr, _
ByVal fileName As String) As IntPtr
End Function

<DllImport("gdi32.dll", EntryPoint:="DeleteEnhMetaFile", _
SetLastError:=True, ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
Public Shared Function DeleteEnhMetaFile(ByVal hemfSrc As IntPtr) As Boolean
End Function


Spero possa essere utile a qualcuno...
Copyright © 2002-2007 - Blogs 2.0
dotNetHell.it | Home Page Blogs
ASP.NET 2.0 Windows 2003