Groups | Blog | Home
all groups > dotnet drawing api > october 2003 >

dotnet drawing api : GDI+: SaveAdd


ComputerNerd22 NO[at]SPAM comcast.net
10/31/2003 8:32:33 AM
I first take a mult-page tiff and add some text to it, and when i save
it only saves the first page, when i try to go back and add the extra
pages or save the new file as mult-page it craps out on me - here is
the code

Imports System.IO
Imports System.Drawing
Imports System.Drawing.Image 'From File
Imports System.Drawing.Imaging

Public Class AddICN
Dim intPageCount As Integer
Dim intPageCountT As Integer
Dim intP As Integer

Dim encParamsCompress As EncoderParameters
Dim encParamsMulti As EncoderParameters
Dim encParamsAddFrame As EncoderParameters
Dim encParamsCloseFrame As EncoderParameters
Dim encCompress As Encoder
Dim encSave As Encoder

Dim oFDimension As System.Drawing.Imaging.FrameDimension

Public Function AddICNToImage(ByVal strInputpath As String, ByVal
strOutputPath As String, ByVal strICN As String, ByVal bolPosition As
Boolean)
Dim dSize As System.Drawing.Size
Dim dImage As Image = FromFile(strInputpath)
Dim Fnt
Dim LeftPos
Dim TopPos
Dim strSize As SizeF
Dim FontColor
Dim FntStyle As FontStyle
Dim FontSize As Integer
Dim FontName As String
Dim FontColors As String

dSize.Height = dImage.Height
dSize.Width = dImage.Width

'Encoder Parameters
encParamsCompress = New EncoderParameters(1)
encParamsMulti = New EncoderParameters(2)
encParamsAddFrame = New EncoderParameters(1)
encParamsCloseFrame = New EncoderParameters(1)

encCompress = New Encoder(Encoder.Compression.Guid)
encSave = New Encoder(Encoder.SaveFlag.Guid)

encParamsCompress.Param(0) = New EncoderParameter(encCompress,
EncoderValue.CompressionCCITT4)

encParamsMulti.Param(0) = New EncoderParameter(encCompress,
EncoderValue.CompressionCCITT4)
encParamsMulti.Param(1) = New EncoderParameter(encSave,
EncoderValue.MultiFrame)

encParamsAddFrame.Param(0) = New EncoderParameter(encSave,
EncoderValue.FrameDimensionPage)

encParamsCloseFrame.Param(0) = New EncoderParameter(encSave,
EncoderValue.Flush)
'End Encoder Parameters

'Get Page Count of Original File
oFDimension = New
System.Drawing.Imaging.FrameDimension(dImage.FrameDimensionsList(0))
intPageCount = dImage.GetFrameCount(oFDimension)
'End Get Page Count

Dim Imgo As New System.Drawing.Bitmap(dImage, dSize)
Dim gImage As System.Drawing.Graphics =
System.Drawing.Graphics.FromImage(Imgo)

FontSize = 28
FontName = "Microsoft Sans Serif"
FntStyle = FontStyle.Italic
FontColors = "00,00,00"
FontColor = Split(FontColors, ",")
Fnt = New Font(FontName, FontSize, FntStyle)

If bolPosition = True Then 'Write ICN on Top of Image
strSize = gImage.MeasureString(strICN, Fnt)
Else 'Write ICN on Side of Image
Dim Counter As Integer
Dim Str As String = ""

For Counter = 0 To strICN.Length - 1
Str &= strICN.Chars(Counter) & vbCrLf
Next

strICN = Str

strSize = gImage.MeasureString(strICN, Fnt)
End If

If bolPosition = True Then 'Position of ICN
TopPos = 10
LeftPos = 650
Else 'Position of ICN
TopPos = 650
LeftPos = 1650
End If

'Write ICN on Image
gImage.DrawString(strICN, Fnt, New
SolidBrush(Color.FromArgb(CInt(FontColor(0)), CInt(FontColor(1)),
CInt(FontColor(2)))), New PointF(LeftPos, TopPos))
'Save Image Not sure past this point
Imgo.Save(strOutputPath, ImageFormat.Tiff)



For intP = 2 To intPageCount - 1
'select next frame and do image.saveadd
dImage.SelectActiveFrame(oFDimension, intP)
'dImage.SaveAdd(dImage, encParamsAddFrame)
dTempI.SaveAdd(dImage, encParamsAddFrame)
Next

dImage.SaveAdd(encParamsCloseFrame)

gImage.Dispose()
Imgo.Dispose()

'If intPageCount < 1 Then
'AddExtraPages()
'End If
End Function

'Private Function AddExtraPages()
' Dim ImageMult As Image = Image.FromFile(strOP)
' Dim ImageEP As Image = Image.FromFile(strIP)
'
' encParamsCompress = New
System.Drawing.Imaging.EncoderParameters(1)
' encParamsMulti = New
System.Drawing.Imaging.EncoderParameters(2)
' encParamsAddFrame = New
System.Drawing.Imaging.EncoderParameters(1)
' encParamsCloseFrame = New
System.Drawing.Imaging.EncoderParameters(1)
'
' encCompress = New
Encoder(System.Drawing.Imaging.Encoder.Compression.Guid)
' encSave = New
Encoder(System.Drawing.Imaging.Encoder.SaveFlag.Guid)
'
' encParamsCompress.Param(0) = New
EncoderParameter(encCompress, EncoderValue.CompressionCCITT4)
'
' encParamsMulti.Param(0) = New
EncoderParameter(encCompress, EncoderValue.CompressionCCITT4)
' encParamsMulti.Param(1) = New EncoderParameter(encSave,
EncoderValue.MultiFrame)
'
' encParamsAddFrame.Param(0) = New
EncoderParameter(encSave, EncoderValue.FrameDimensionPage)
'
' encParamsCloseFrame.Param(0) = New
EncoderParameter(encSave, EncoderValue.Flush)
'
'
' oFDimension = New
System.Drawing.Imaging.FrameDimension(ImageEP.FrameDimensionsList(0))
'
' intPageCount = ImageEP.GetFrameCount(oFDimension)
'
' strOP = "C:\Documents and
Settings\tsaunde\Desktop\hello_temp.tiff"
'
' ImageMulti.Save(strOP, GetCodecInfo(ImageFormat.Tiff),
encParamsMulti)
'
' Dim intP As Integer
'
' If intPageCount <> 0 Then
' For intP = 2 To intPageCount - 1
' 'select next frame and do image.saveadd
' ImageEP.SelectActiveFrame(oFDimension, intP)
' ImageEP.SaveAdd(ImageEP, encParamsAddFrame)
' Next
' ImageEP.SaveAdd(encParamsCloseFrame)
' End If
'
' 'End New Stuff
' End Function

Private Shared Function GetCodecInfo(ByVal format As ImageFormat)
As ImageCodecInfo
Dim codecs As ImageCodecInfo()
Dim codec As ImageCodecInfo
Dim clsid As Guid
Dim i As Integer

clsid = format.Guid
codecs = ImageCodecInfo.GetImageEncoders()

For Each codec In codecs
If clsid.Equals(codec.FormatID) Then Return codec
Next
End Function

ComputerNerd22 NO[at]SPAM comcast.net
11/3/2003 6:48:44 AM
I am now trying this but i sitll get the same error, any ideas.

Private Function AddExtraPages()
Dim iMain As Image = image.FromFile(strIP)
Dim iTemp As Image = image.FromFile(strOP) 'Has ICN on Image
Dim encParamsCompress As EncoderParameters
Dim encParamsMulti As EncoderParameters
Dim encParamsAddFrame As EncoderParameters
Dim encParamsCloseFrame As EncoderParameters
Dim encCompress As Encoder
Dim encSave As Encoder

encParamsCompress = New EncoderParameters(1)
encParamsMulti = New EncoderParameters(2)
encParamsAddFrame = New EncoderParameters(1)
encParamsCloseFrame = New EncoderParameters(1)

encCompress = New Encoder(Encoder.Compression.Guid)
encSave = New Encoder(Encoder.SaveFlag.Guid)

encParamsCompress.Param(0) = New EncoderParameter(encCompress,
EncoderValue.CompressionCCITT4)

encParamsMulti.Param(0) = New EncoderParameter(encCompress,
EncoderValue.CompressionCCITT4)
encParamsMulti.Param(1) = New EncoderParameter(encSave,
EncoderValue.MultiFrame)

encParamsAddFrame.Param(0) = New EncoderParameter(encSave,
EncoderValue.FrameDimensionPage)

encParamsCloseFrame.Param(0) = New EncoderParameter(encSave,
EncoderValue.Flush)

'code for setting propertyitem

Dim oFDimensionM As System.Drawing.Imaging.FrameDimension
oFDimensionM = New
System.Drawing.Imaging.FrameDimension(iMain.FrameDimensionsList(0))
intPageCount = iMain.GetFrameCount(oFDimensionM)
MsgBox(intPageCount)

Dim oFDimensionT As System.Drawing.Imaging.FrameDimension
oFDimensionT = New
System.Drawing.Imaging.FrameDimension(iTemp.FrameDimensionsList(0))
intPageCountT = iTemp.GetFrameCount(oFDimensionT)
MsgBox(intPageCountT)

iMain.Save("C:\Documents and
Settings\tsaunde\Desktop\Hi.tiff", GetCodecInfo(ImageFormat.Tiff),
encParamsMulti)

For intP = 0 To intPageCount - 1
iMain.SelectActiveFrame(oFDimensionM, intP)
iTemp.SaveAdd(iMain, encParamsAddFrame)
Next

iTemp.SaveAdd(encParamsCloseFrame)
End Function

[quoted text, click to view]
AddThis Social Bookmark Button