|
Hi,
the problem basically is that the PictureBox is doing things (panning, zooming, resizing, ...) to your image, and not to whatever you draw on top of it.
There are two solutions:
1. mimic the PictureBox logic for everything you are drawing on top of it.
2. don't use a PictureBox at all; use a Panel instead, show the image by painting it with Graphics.DrawImage; now implement the panning, zooming, resizing,... whatever you want yourself and apply them equally to the image and the other parts drawn (best use one or some of the Transform methods which manipulate coordinates and scales).
I always do (2), there is no benefit in trying to mimic a PictureBox when it works against you.
|
|
|
|
|
Thanks for the reply, but I think using Graphics.DrawImage to paint the image on the panel isn't going to work for me, perhaps I should explain my intention more clearly. What I want to do is allow the user to crop their high resolution image, but the entire image must be displayed on the form without parts of it cutting off, in order to do this I have scale down the image to best fit the picture box and keeping the SizeMode to Normal. However, when the user crops the image the crop must come from the high resolution image itself but not the scale down version displayed in the picture box. I have managed to achieved cropping the right portion of the scale down version of the image, but obviously cropping the scale down version will mean that I will lose the original resoultion and keeping the high resolution is an absolute requirement for this application.
Correct me if I am approaching this the wrong way, but my thinking is that as the user draws the rectangle on the scale down version of the image, instead of the passing the scale down version through Image.Clone or Grahics.DrawImage, the orignal high resolution version is passed through instead and there needs to be some sort of code that proportionately scale up the rectangle drawn so that what ever section that the user crop on the scale down version will match the high resolution version. I don't know if it is possible to acheive this nor do I have any idea how to approach this, any help will be much appreciated.
Hope all this make sense, thanks in advance.
|
|
|
|
|
Hi,
First of all anything a PictureBox can do you can do wiith a Panel, the difference is when drawing yourself you are in charge.
look carefully at the Graphics class; its DrawImage method will paint an image and its DrawRectangle will paint a rectangle. Both will use the same coordinate system, which you can freely choose.
If you apply a transformation (TranslateTransform, ScaleTransform) it will:
1. apply to everything you draw afterwards
2. allow you to position and scale everything so that e.g. part of your image falls outside the panel.
So you can scale down a 1000*1000 picture and a 900*900 rectangle to a 100*100 panel; have the arrow keys move the (unscaled) rectangle move by 1 pixel in real coordinates (hence 0.1 px on the screen), etc.
|
|
|
|
|
I suspect that Luc is probably correct in his reply to your question.
I have been caught out in the past when doing this sort of thing, and you might like to bear in mind, that not all images are saved at the same resolution as your screen. I use 96 ppi and have had problems with images saved at 72 ppi. Of course stretching/zooming the image will cause more problems, but this might become relevant when the selected region is small enough to display in its entirety.
Henry Minute
Do not read medical books! You could die of a misprint. - Mark Twain
Girl: (staring) "Why do you need an icy cucumber?"
“I want to report a fraud. The government is lying to us all.”
|
|
|
|
|
Henry Minute wrote: I suspect that Luc is probably correct
Thanks for the endorsement.
|
|
|
|
|
I want to list security groups of several folders in my windows 2003 server.
Is there anyway that i can do this without doing manually?
dsquery can do this ,,please someone post the query ?
modified on Tuesday, April 28, 2009 8:07 AM
|
|
|
|
|
What does this have to do with VB.NET??
|
|
|
|
|
"Steve Ballmer will deliver the keynote at Microsoft Tech-ed India 2009 Conference in Hyderabad. There will be announcements related to Windows 7, Silverlight 3, Microsoft Surface Computer, Tata Nano, IPL, etc. and Microsoft will also provide free certification to all onsite attendees.
What: Microsoft Tech-ed India 2009
Where: Hyderabad
When: May 13-15, 2009
Register: http://www.microsoft.com/india/teched2009
There is also a ""Top Architect"" contest being organized. http://virtualtechdays.com/toparchitect/default.aspx
|
|
|
|
|
Will you please stop friggin' spamming the forums?!?
|
|
|
|
|
I am connecting an access mdb format and cannot display the values from the database table onto a form in vb . I need also to enter values to the same database. I appreciate any help anyone can provide as I am new to all this.
I did the same exercise as from
http://www.homeandlearn.co.uk/NET/nets12p4.html
but did not help a lot.
thanks
|
|
|
|
|
Choose an easier task and do that first, buy a book and work through it.
Christian Graus
Driven to the arms of OSX by Vista.
"I am new to programming world. I have been learning c# for about past four weeks. I am quite acquainted with the fundamentals of c#. Now I have to work on a project which converts given flat files to XML using the XML serialization method" - SK64 ( but the forums have stuff like this posted every day )
|
|
|
|
|
Christian Graus wrote: buy a book and work through it
Illegally download a book and work through that.
------------------------------------
"Children today are tyrants. They contradict their parents, gobble their food and tyrannize their teachers. I despair for the future."
Socrates 400BC
|
|
|
|
|
When making connections ensure that you put the database on the Bin folder, then under the properties of the database ensure that you make changes to copy as new or other options in changes of the database.hope it help
|
|
|
|
|
Does anyone know how to get the raw HDBC handle from a VB ODBC SQL server connection.
I have written a c++ dll that reads an encrypted password, decrypts it and then does an sp_SetAppRole on the database handle to switch roles, but I need to extend this model to some VB applications.
I prefer the decryption to occur in the dll so the VB programmer cannot see the decrypted password in the debugger (yes, advanced developers could step through the assembler).
Ideally I can continue to use the same dll and pass the VB database handle to the dll but I cannot find how to get the raw database handle in VB. It must be there somewhere?
Thanks
Stephen Woods
Reserve Bank of Australia
Sydney NSW Australia
|
|
|
|
|
It's there, but not exposed anywhere. AFAIKT, there's no way to get to it.
|
|
|
|
|
Dear ALL
CAN I use RTMP in my uni. project of "video conference desktop application in vb dot net"
please guide me .
Thank you very much
|
|
|
|
|
Sure, if you like.
Christian Graus
Driven to the arms of OSX by Vista.
"I am new to programming world. I have been learning c# for about past four weeks. I am quite acquainted with the fundamentals of c#. Now I have to work on a project which converts given flat files to XML using the XML serialization method" - SK64 ( but the forums have stuff like this posted every day )
|
|
|
|
|
Dear ALL
CAN I use RTMP in my uni. project of "video conference desktop application in vb dot net"
my guide me ???
|
|
|
|
|
Hi,
I am completely new to .NET 3.5.I came across a code in vb.net which I am not able to understand. Below is the code
<flags()>
Public Enum ModemStatusBits
ClearToSendOn = &H10
DataSetReadyOn = &H20
End Enum
<structlayout(layoutkind.sequential,pack:>
Private Structure DCB
Public DCBlength As Integer
Public BaudRate As Integer
Public Bits1 As Integer
End Structure
<dllimport("kernel32.dll")> Private Shared Function WaitForSingleObject( _
ByVal hHandle As Integer, ByVal dwMilliseconds As Integer) As Integer
End Function
here what does he mean by putting something in <> before enum,struct,Function
Thanks in advance
|
|
|
|
|
These are called attributes, this not something very new , the code above seems to use a native windows API (Windows API can be considered as functions provided by OS , to be able to program the OS), This Windows API are present in the dll files Kernel32.dll , GDI32.dll, etc , so in above code we are using attribute "<dllimport("kernel32.dll")>" to tell the compiler that we want to use a windows function WaitForSingleObject() which is present in Kernel32.dll , in the same way we want the compiler to allocate the memory in sequential order hence use an attribute <structlayout(layoutkind.sequential,pack:> (the reason for this sequential allocation is a different topic , let me know if you want details regarding the reason , for now I will skip it )
Hope this make things clear, let me know if you need further information
-Regards
Bharat Jain
bharat.jain.nagpur@gmail.com
|
|
|
|
|
Hi Bharat
Thanks a lot for replying so soon. I want to know in detail about this feature attributes.How to use that and what are the advantages.
If you dont mind can you give a url or some tutorial describing about this.
My mail id is poornachandarv_004@hotmail.com
Thanks a lot
|
|
|
|
|
|
Ya that is true the best way to learn is MSDN documents , also use the intellisense in Visual Studios , it would be too hard to mention about all attributes , but if you have specific doubts , may be i can help
-Regards
Bharat Jain
bharat.jain.nagpur@gmail.com
|
|
|
|
|
this is the code i used to draw Rubberband selection on panel..when i draw rubberband selection it's hiding the Shape controls..
please give me the idea..
Thanks
Public Class Form2
Dim Rect As Rectangle
Private Sub Panel1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Panel1.MouseDown
Rect.Location = e.Location
End Sub
Private Sub Panel1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Panel1.MouseMove
If e.Button = MouseButtons.Left Then Rect.Size = New Size(e.X - Rect.X, e.Y - Rect.Y)
Panel1.Invalidate()
End Sub
Private Sub Panel1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Panel1.MouseUp
Rect.X = -1
Rect.Y = -1
Rect.Width = -1
Rect.Height = -1
End Sub
Private Sub Panel1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Panel1.Paint
Dim L, T, W, H As Integer
L = Rect.X
T = Rect.Y
W = Rect.Width
H = Rect.Height
If W < 0 Then
L += W : W = -W
End If
If H < 0 Then
T += H : H = -H
End If
Dim p As New Pen(Color.Black)
p.DashStyle = System.Drawing.Drawing2D.DashStyle.Dot
e.Graphics.DrawRectangle(p, New Rectangle(L, T, W, H))
End Sub
End Class
|
|
|
|
|
THe only thing I can think of that could cause this, is if the Shape Controls are not contained by your panel. It is possible for controls hosted by the form to appear on top of a panel, which is also hosted by the form. Are you sure that the shapes are on the panel?
Henry Minute
Do not read medical books! You could die of a misprint. - Mark Twain
Girl: (staring) "Why do you need an icy cucumber?"
“I want to report a fraud. The government is lying to us all.”
|
|
|
|