i m writing a small program to add text on the picture box
but when i run my program...then this error comes"Object reference not set to an instance of an object." on the following line
Dim tbm As Bitmap = CType(bm.Clone, Bitmap)
whole paint event is as follow
Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
Dim tbm As Bitmap = CType(bm.Clone, Bitmap)
Dim g As Graphics = Graphics.FromImage(tbm)
Dim mx As Matrix = New Matrix
Dim gpathText As New GraphicsPath
Dim br As SolidBrush = New SolidBrush(Color.FromArgb(tbarTrans.Value, _
Color.LightCoral))
'Smooth the Text
g.SmoothingMode = SmoothingMode.AntiAlias
'Make the GraphicsPath for the Text
Dim emsize As Single = Me.CreateGraphics.DpiY * pic_font.SizeInPoints / 72
'gpathText.AddString(strText, pic_font.FontFamily, CInt(pic_font.Style), _
' emsize, New RectangleF(ptText.X, ptText.Y, szText.Width, szText.Height), _
' StringFormat.GenericDefault)
'Draw a copy of the image to the Graphics Object canvas
g.DrawImage(CType(bm.Clone, Bitmap), 0, 0)
'Rotate the Matrix at the center point
mx.RotateAt(tbarRotate.Value, _
New Point(ptText.X + (szText.Width / 2), ptText.Y + (szText.Height / 2)))
'Get the points for the rotated text bounds
mx.TransformPoints(ptsText)
'Transform the Graphics Object with the Matrix
g.Transform = mx
'Draw the Rotated Text
g.FillPath(br, gpathText)
If chkAddOutline.Checked Then
Using pn As Pen = New Pen(Color.FromArgb(tbarTrans.Value, Color.White), 1)
g.DrawPath(pn, gpathText)
End Using
End If
'Draw the box if the mouse is over the Text
If MouseOver Then
g.ResetTransform()
g.DrawPolygon(ptsTextPen, ptsText)
End If
'Draw the whole thing to the form
e.Graphics.DrawImage(tbm, 10, 10)
tbm.Dispose()
g.Dispose()
mx.Dispose()
br.Dispose()
gpathText.Dispose()
End Sub
i have converted this program from an other program which ads text on the form to a pre-assigned picture on the form
but i have converted it into a picture box
i have added a picture box and calling its paint event while in the original program..form pain event is called
attaching the file
kindly help me
GremlinSA
July 11th, 2008, 04:47 PM
What you need here is the Graphics object, and your Bitmap must acctually be a Image typeDim tbm As Image
Dim tbmGobj as Graphics
tbm = New Bitmap(bm.Image)
tbGobj = Graphics.FromImage (bm.Image)
Gremmy..
aamir55
July 12th, 2008, 11:37 PM
i have tried ur code but this is giving errors
it is giving two errors on the following line
tbm = New Bitmap(bm.image)
tbmGobj = Graphics.FromImage(bm.image)
Error is "image' is not a member of 'System.Drawing.Bitmap'.
now whole code of picture paint event is as follow
Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
Dim tbm As Image
Dim tbmGobj As Graphics
tbm = New Bitmap(bm.image)
tbmGobj = Graphics.FromImage(bm.image)
Dim g As Graphics = Graphics.FromImage(tbm)
Dim mx As Matrix = New Matrix
Dim gpathText As New GraphicsPath
Dim br As SolidBrush = New SolidBrush(Color.FromArgb(tbarTrans.Value, _
Color.LightCoral))
'Smooth the Text
g.SmoothingMode = SmoothingMode.AntiAlias
'Make the GraphicsPath for the Text
Dim emsize As Single = Me.CreateGraphics.DpiY * pic_font.SizeInPoints / 72
'gpathText.AddString(strText, pic_font.FontFamily, CInt(pic_font.Style), _
' emsize, New RectangleF(ptText.X, ptText.Y, szText.Width, szText.Height), _
' StringFormat.GenericDefault)
'Draw a copy of the image to the Graphics Object canvas
g.DrawImage(CType(bm.Clone, Bitmap), 0, 0)
'Rotate the Matrix at the center point
mx.RotateAt(tbarRotate.Value, _
New Point(ptText.X + (szText.Width / 2), ptText.Y + (szText.Height / 2)))
'Get the points for the rotated text bounds
mx.TransformPoints(ptsText)
'Transform the Graphics Object with the Matrix
g.Transform = mx
'Draw the Rotated Text
g.FillPath(br, gpathText)
If chkAddOutline.Checked Then
Using pn As Pen = New Pen(Color.FromArgb(tbarTrans.Value, Color.White), 1)
g.DrawPath(pn, gpathText)
End Using
End If
'Draw the box if the mouse is over the Text
If MouseOver Then
g.ResetTransform()
g.DrawPolygon(ptsTextPen, ptsText)
End If
'Draw the whole thing to the form
e.Graphics.DrawImage(tbm, 10, 10)
tbm.Dispose()
g.Dispose()
mx.Dispose()
br.Dispose()
gpathText.Dispose()
End Sub
secondly i m loading picture into the picture box through open dialog as follow
Private Sub OpenPictureToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OpenPictureToolStripMenuItem.Click
Try
Dim openFileDlg As New OpenFileDialog
openFileDlg.Filter = "Images (*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF|All files (*.*)|*.*"
With openFileDlg
.CheckFileExists = True
.ShowReadOnly = False
.Filter = "All Files|*.*|Bitmap Files (*)|*.bmp;*.gif;*.jpg"
.FilterIndex = 2
If .ShowDialog = Windows.Forms.DialogResult.OK Then
Me.PictureBox1.Image = Image.FromFile(.FileName)
PictureBox1.SizeMode = PictureBoxSizeMode.CenterImage
'If Auto_Size Then Pic2Pic(pb, Panel1, Enlarge, Shrink)
End If
End With
Catch ex As Exception
MessageBox.Show("Can not open file")
End Try
End Sub
i didn't understand this one"your Bitmap must acctually be a Image type"
kindly guide me more..
javajawa
July 13th, 2008, 03:32 AM
As you've defined bm as a bitmap, this is a valid argument for both New Bitmap() and Graphics.FromImage()
Therfore:
tbm = New Bitmap(bm)
tbmGobj = Graphics.FromImage(bm)
Hope that Helps!
aamir55
July 14th, 2008, 08:50 AM
i have tried this code but error is coming on the following line when i run the application
tbm = New Bitmap(bm)
what can i do now???
kindly help me.
javajawa
July 14th, 2008, 09:58 AM
What is the error? If it mentioned a Null Reference, then the problem is that the picture bo gets painted before the variable bm is initialised. the best way round this is to declare a private variable in the form to determine whether a bitmap hads been loaded, or to perform a test on bm. For example, adding:
If bm Is Nothing Then Exit Sub
to the beginning of the paint routine should sort things out. It's not the neatest way, but the quickest to write. :D
javajawa
July 14th, 2008, 11:34 AM
I've just noticed that your program fails to do anything then. In fact, as far as I can see, bm is only used as a reference point for reate other bitmaps. It is never given any dimensions, nor is it ever used directly. Therefore, it's default state is Nothing. Is it meant to represent the original image? In which case just use PictureBox1.Image.
Also, tbmGobj seems to serve no purpose either...
Well, If I'm honest, I'm a bit out of my depth in graphics...I'll stick to text and logic any day...
aamir55
July 16th, 2008, 08:16 AM
i m giving some code here
in this code paint is applied on the form and a picture is paint on the form when program loads and a text is also loaded when first time run.
but i want make changes as following
1.i can invoke paint event of picture box
2.when program loads first time...picture box should nothing
3.i can load picture from disk through a open dialog box after loading the form
4.i can then add the text on the picture manually through a text box
Dim pic_font As New Font("Arial Black", 40, FontStyle.Regular, GraphicsUnit.Pixel)
Dim bm As Bitmap
Dim strText As String = "Diver Dude"
Dim szText As New SizeF
Dim ptText As New Point(125, 125)
Dim ptsText() As PointF
Dim MovingOffset As PointF
Dim ptsTextPen As Pen = New Pen(Color.LightSteelBlue, 1)
Dim MouseMoving As Boolean
Dim MouseOver As Boolean
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
bm = Image.FromFile(Application.StartupPath & "\DivePic.bmp")
szText = Me.CreateGraphics.MeasureString(strText, pic_font)
setptsText()
ptsTextPen.DashStyle = DashStyle.Dot
End Sub
Private Sub Form1_Paint(ByVal sender As Object, _
ByVal e As System.Windows.Forms.PaintEventArgs) _
Handles MyBase.Paint
Dim tbm As Bitmap = CType(bm.Clone, Bitmap)
Dim g As Graphics = Graphics.FromImage(tbm)
Dim mx As Matrix = New Matrix
Dim gpathText As New GraphicsPath
Dim br As SolidBrush = New SolidBrush(Color.FromArgb(tbarTrans.Value, _
Color.LightCoral))
'Smooth the Text
g.SmoothingMode = SmoothingMode.AntiAlias
'Make the GraphicsPath for the Text
Dim emsize As Single = Me.CreateGraphics.DpiY * pic_font.SizeInPoints / 72
gpathText.AddString(strText, pic_font.FontFamily, CInt(pic_font.Style), _
emsize, New RectangleF(ptText.X, ptText.Y, szText.Width, szText.Height), _
StringFormat.GenericDefault)
'Draw a copy of the image to the Graphics Object canvas
g.DrawImage(CType(bm.Clone, Bitmap), 0, 0)
'Rotate the Matrix at the center point
mx.RotateAt(tbarRotate.Value, _
New Point(ptText.X + (szText.Width / 2), ptText.Y + (szText.Height / 2)))
'Get the points for the rotated text bounds
mx.TransformPoints(ptsText)
'Transform the Graphics Object with the Matrix
g.Transform = mx
'Draw the Rotated Text
g.FillPath(br, gpathText)
If chkAddOutline.Checked Then
Using pn As Pen = New Pen(Color.FromArgb(tbarTrans.Value, Color.White), 1)
g.DrawPath(pn, gpathText)
End Using
End If
'Draw the box if the mouse is over the Text
If MouseOver Then
g.ResetTransform()
g.DrawPolygon(ptsTextPen, ptsText)
End If
'Draw the whole thing to the form
e.Graphics.DrawImage(tbm, 10, 10)
tbm.Dispose()
g.Dispose()
mx.Dispose()
br.Dispose()
gpathText.Dispose()
End Sub
then help me...thanks
codeguru.com
Copyright Internet.com Inc., All Rights Reserved.