|
IDs are typically numbers and therefore should not be in quotes.
Christian Graus
Driven to the arms of OSX by Vista.
|
|
|
|
|
|
jetspike wrote: in form2 I create an instance of form1
so Form1 creates Form2, and Form2 creates yet another Form1; how many Forms do you actually see? if you create three but only see two, is that sufficient reason to believe the third one will magically coincide with the first? how would the second Form1 relate to the first Form1, except for being twins?
It is sickening to see this kind of posts all the time, it just indicates people are not willing to study the basic stuff, read a book on a programming language, then read a book on object orientation, then read some of the hundreds of articles on the subject available here on this site,. until they understand what they are doing.
And don't bother to reply.
Luc Pattyn [Forum Guidelines] [My Articles]
- before you ask a question here, search CodeProject, then Google
- the quality and detail of your question reflects on the effectiveness of the help you are likely to get
- use the code block button (PRE tags) to preserve formatting when showing multi-line code snippets
|
|
|
|
|
jetspike wrote: Form1 form1 = new Form1();
As has been said, people post this stuff all the time, and what it tells us is that you understand close to nothing about the code you are writing. Read a book on OO and a book on C#, learn some basics.
Christian Graus
Driven to the arms of OSX by Vista.
|
|
|
|
|
hi
How Can i Change the Image instance Size
it could not be used as following
image.Size.Height=200;
it will raise an exception :
"Cannot modify the return value of 'System.Drawing.Image.Size' because it is not a variable"
so i tried to use the following code:
<br />
int size = image.Size.Height;<br />
size= 200;<br />
and also :
<br />
Size size = image.Size;<br />
size.Height= 200;<br />
but it does not work
please help me
thanks
|
|
|
|
|
It seems you are not understanding some basics of imaging. To resize an image, you need to specify a method to use, and then you need to build the image at the new size. Changing just the height is impossible because, apart from other things, you're not defining what you really want. Assuming the current height is < 200, do you want a new blank area under the image, or do you want to stretch it ? If it's greater, do you want to crop the image, or compress it ? In either case, changing height without changing width and making the image fit, will distort it.
You need to create a new bitmap of the size you want, select it into a Graphics object, and use that to draw your old image onto the new one, either distorting it, or drawing just the portion you want onto the portion of the new bitmap as required.
Christian Graus
Driven to the arms of OSX by Vista.
|
|
|
|
|
|
I want to know how can save an image into SQL Server and retrive it again into Picture control using SqlDataReader? here is my code to read from the database and now I need to read the image in addition to the data I ma reading:
private void get_staff_info()
{
this.Cursor = Cursors.WaitCursor;
sql_connection = new SqlConnection("Data Source=.\\SQLEXPRESS;initial catalog=ssis_database;integrated security=true;");
sql_connection.Open();
sql_command = new SqlCommand("sp_get_staff_info_by_id", sql_connection);
sql_command.CommandType = CommandType.StoredProcedure;
sql_command.Parameters.Add("@staff_id", SqlDbType.Int).Value = staff_id;
sql_reader = sql_command.ExecuteReader();
if (!sql_reader.HasRows)
{
MessageBox.Show("staff not found!!", "error", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}
else
{
if (sql_reader.Read())
{
lblCPR.Text = sql_reader["staff_cpr"].ToString();
lblFullName.Text = sql_reader["staff_name"].ToString();
lblBirthday.Text = Convert.ToDateTime(sql_reader["staff_birthday"]).ToString("dd-MMM-yyyy");
TimeSpan age = DateTime.Now - Convert.ToDateTime(sql_reader["staff_birthday"]);
int years = age.Days / 365;
int months = (age.Days - (years * 365)) / 30;
string strAge = String.Format("{0}y", years);
lblBirthday.Text += " [" + strAge + "]";
lblGender.Text = sql_reader["gender_name"].ToString();
lblNationality.Text = sql_reader["country_name"].ToString();
lblFlat.Text = sql_reader["staff_address_flat"].ToString();
lblBuilding.Text = sql_reader["staff_address_building"].ToString();
lblRoad.Text = sql_reader["staff_address_road"].ToString();
lblBlock.Text = sql_reader["staff_address_block"].ToString();
lblTelephoneHome.Text = sql_reader["staff_telephone_home"].ToString();
lblTelephoneMobile.Text = sql_reader["staff_telephone_mobile"].ToString();
lblTelephoneMobile2.Text = sql_reader["staff_telephone_mobile2"].ToString();
lblEmailAddress.Text = sql_reader["staff_email_address"].ToString();
lblGrade.Text = sql_reader["grade_name"].ToString();
lblStep.Text = sql_reader["step_name"].ToString();
lblSalary.Text = Convert.ToDecimal(sql_reader["staff_salary"]).ToString("BD #,###,##0.000");
lblBank.Text = sql_reader["bank_name"].ToString();
lblBankAccount.Text = sql_reader["staff_bank_account"].ToString();
sql_reader.Close();
}
}
this.Cursor = Cursors.Default;
}
|
|
|
|
|
Hi,
I haven't done that myself yet with SQL Server, however I remember from other posts there basically are two ways: either store the binary data as a BLOB, or use Base64 encoding and store it as a string.
They both involve a byte[] and a MemoryStream, then you can restore the image with Image.FromStream
I suggest you search CodeProject for the keywords in your subject line and the ones I just gave you.
Luc Pattyn [Forum Guidelines] [My Articles]
- before you ask a question here, search CodeProject, then Google
- the quality and detail of your question reflects on the effectiveness of the help you are likely to get
- use the code block button (PRE tags) to preserve formatting when showing multi-line code snippets
|
|
|
|
|
|
simplest way is that add a new column of 'Image' type, convert image to byte[] using MemoryStream. Eg
MemoryStream ms = new MemoryStream();
image.Save(ms, imageFormat);
ms.ToArray();
then insert new row and set byte[] to that Image column using SQL Param.
When you wanna retrieve that image, just use Select command as usual.
TVMU^P[[IGIOQHG^JSH`A#@`RFJ\c^JPL>;"[,*/|+&WLEZGc`AFXc!L
%^]*IRXD#@GKCQ`R\^SF_WcHbORY87֦ʻ6ϣN8ȤBcRAV\Z^&SU~%CSWQ@#2
W_AD`EPABIKRDFVS)EVLQK)JKSQXUFYK[M`UKs*$GwU#(QDXBER@CBN%
Rs0~53%eYrd8mt^7Z6]iTF+(EWfJ9zaK-iTV.C\y<pjxsg-b$f4ia>
--------------------------------------------------------
128 bit encrypted signature, crack if you can
|
|
|
|
|
Xmen wrote: When you wanna retrieve that image, just use Select command as usual.
how?
|
|
|
|
|
select ImageColumnName from TabelName
TVMU^P[[IGIOQHG^JSH`A#@`RFJ\c^JPL>;"[,*/|+&WLEZGc`AFXc!L
%^]*IRXD#@GKCQ`R\^SF_WcHbORY87֦ʻ6ϣN8ȤBcRAV\Z^&SU~%CSWQ@#2
W_AD`EPABIKRDFVS)EVLQK)JKSQXUFYK[M`UKs*$GwU#(QDXBER@CBN%
Rs0~53%eYrd8mt^7Z6]iTF+(EWfJ9zaK-iTV.C\y<pjxsg-b$f4ia>
--------------------------------------------------------
128 bit encrypted signature, crack if you can
|
|
|
|
|
Im creating multiple buttons based on artists from a database. i am creating the buttons perfectly but have a problem assigning click events to individual buttons. I want to be able to click a button and open another form with the info and songs from the artist that was on that particular button.
I am an amateur programmer(lol), so dont ride me too bad if the solution is painfully obvious.
public partial class frmSearchArtists : Form
{
OleDbConnection musLibConn = new OleDbConnection();
utility util = new utility();
string artist;
int i = 0;
public frmSearchArtists()
{
InitializeComponent();
musLibConn.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Program Files\GeneSys\Library.mdb";
musLibConn.Open();
OleDbCommand selLib = new OleDbCommand("SELECT DISTINCT Artist FROM Library ORDER BY Artist", musLibConn);
OleDbDataReader drLib = selLib.ExecuteReader();
int idxArtist = drLib.GetOrdinal("Artist");
Button btn;
while(drLib.Read())
{
btn = new Button();
btn.Text = drLib.GetValue(idxArtist).ToString();
artist = drLib.GetValue(idxArtist).ToString();
btn.Name = artist;
btn.ForeColor = Color.White;
btn.Size = new System.Drawing.Size(120, 60);
btn.BackColor = Color.MidnightBlue;
btn.Font = new Font("Arial Black", 10, FontStyle.Bold);
btn.Click += new System.EventHandler(this.btnArtist_click);
flp.Controls.Add(btn);
i++;
}
}
private void btnArtist_click(object sender, EventArgs e)
{
util.setArtist(artist);
frmArtist frmArtist = new frmArtist();
frmArtist.Show();
}
}
Any ideas or just suggestions to make existing code better?
|
|
|
|
|
Jon Henry wrote: I want to be able to click a button and open another form with the info and songs from the artist that was on that particular button.
Use the sender parameter to identify the button which is clicked. Use the Tag[^] property in button to keep you custom information about that button. You can access it like the below in button handler,
private void btnArtist_click(object sender, EventArgs e)
{
Button clickedButton = sender as Button;
string artist = (string)clickedButton.Tag;
.....
} You set tag like
while(drLib.Read())
{
Button btn = new Button();
btn.Tag = drLib.GetValue(idxArtist).ToString();
}
|
|
|
|
|
Outstanding! Thank you Navaneeth, it works perfectly.
|
|
|
|
|
Does anyone know where there is information on C# programming of the Media Center Remote to work with the axmediaplayer.
|
|
|
|
|
Hi,
I have DateTime objects that are all GMT+0 times. I'd like to display them in my program so that it matches system's timezone.
For instance, the DateTime "2009-03-14 16:00:00" would be ouput as a string as "2009-03-14 17:00:00 (GMT+1)" if my system timezone is set to GMT+1.
How can I do this? DateTime.ToString MSDN doc doesn't help; I'm not sure if there's an easy way to do this :/
|
|
|
|
|
You need to use the locale classes to work out what the timezone is, then build your own string that shows this information.
http://msdn.microsoft.com/en-us/library/system.datetimeoffset.aspx[^] is one option, the other is to convert the time to UTC, and then work out the difference.
Christian Graus
Driven to the arms of OSX by Vista.
|
|
|
|
|
Here is the unmanged definition:
//============================================================================
// DcamCapture()
// Start to acquire one image from the camera.
// ---------------------------------------------------------------------------
// [Argument]
// pImageBuff : /O: Specify the start address in the buffer where image
// data is to be stored.
// nBuffSize :I/ : Specify the buffer size (number of bytes).
// [Return values]
// If the function succeeds the return value is TRUE (1).
// If the function fails the return value is FALSE (0).
// To obtain detailed error information, use the DcamGetLastError function.
// [Note]
// 1. This function issues an instruction to start image acquisition.
// Since image acquisition is not complete even when this function ends,
// use the DcamWait function to check whether image acquisition is complete.
// 2. The necessary buffer size can be obtained with the DcamGetFrameBytes function.
//============================================================================
_DCAMLIBEXPORT BOOL _DCAMLIBSTDCALL DcamCapture( LPVOID pImageBuff, INT nBuffSize );
Here is my C# code which does not work:
class DCamLIB
{
private IntPtr ImageBuffer;
public DCamLIB()
{
ImageBuffer = new IntPtr( 0 );
}
[DllImport( "DCamLIB.dll" )]
private static extern bool DcamCapture( out IntPtr imageBuffer, Int32 bufferSize );
public void Capture( Int32 bufferSize )
{
if ( !DcamCapture( out ImageBuffer, bufferSize ) )
{
throw new DCamLIBException( this );
}
}
}
No matter what ImageBuffer = 0.
Ideas?
|
|
|
|
|
Hi Jason,
I doubt the first parameter is an output parameter.
To me LPVOID is the same as "void* ", i.e. pointer to something however I will not tell you what.
So it expects the address of an existing buffer, which is quite good actually, that way you can have the managed world allocate a buffer, pass it to the native camera code to get it filled, then use its content in the managed world.
There are basically two ways to allocate a buffer and pass its address:
1. using the fixed keyword
2. using the GCHandle class (get a handle, get a pointer, use, release)
1. is easier, 2. has more functionality (which one would need if the pointer needs to remain valid after the native function returns, e.g. when doing asynchronous stuff).
So I suggest you read up on "fixed" and drop the "out" from your native function's prototype.
Luc Pattyn [Forum Guidelines] [My Articles]
- before you ask a question here, search CodeProject, then Google
- the quality and detail of your question reflects on the effectiveness of the help you are likely to get
- use the code block button (PRE tags) to preserve formatting when showing multi-line code snippets
modified on Saturday, March 14, 2009 12:44 PM
|
|
|
|
|
So...
[DllImport( "DCamLIB.dll" )]
private unsafe static extern bool DcamCapture( int* imageBuffer, Int32 bufferSize );
public unsafe void Capture( Int32 bufferSize )
{
fixed ( int* ImageBuffer = new int[ bufferSize ] )
{
if ( !DcamCaptureReverseX( ImageBuffer, bufferSize ) )
{
throw new DCamLIBException( this );
}
}
}
If I needed to save the image to disk I would need to do so inside the fixed statement?
I need to do this so the garbage collector is not relocating a movable variable? The variable is essentially "pinned" during the fixed statement?
|
|
|
|
|
Hi,
1.
yes "fixed" is one way to pin down something, for as long as you are inside its code block.
2.
it is strange to see a Capture() method without any outputs. You should either provide a "string filename" parameter if you want it to save to disk, or return something "... int[] Capture(...)" if you want your app to work on it.
I would suggest something along these lines (note the use of "code block" button resulting in PRE tags which gives a monospaced font and preserves formatting):
public unsafe int[] Capture( Int32 bufferSize ) {
int[] buf = new int[ bufferSize ];
fixed ( int* ImageBuffer = buf ) {
if ( !DcamCaptureReverseX( ImageBuffer, bufferSize ) ) throw new DCamLIBException( this );
}
return buf;
}
3.
Once the native world is done with your buffer, it does not need the pinning; and the managed code can operate on it without restrictions, e.g. save it to disk.
4.
remarks:
- it is unusual, and probably not so good, to have exceptions without a string argument, passing some message in.
- there would be no need to zero out the buffer, managed arrays are always zero-filled automatically upon creation; the CLR designers have chosen to do so, in order to eliminate random behavior when you forget to fill it up and start using whatever happens to be there.
5.
are you sure int[] is right? that indicates 32 bit per pixel; would be fine for color images, and probably overkill (and memory waste) for grayscale. Some native C/C++ systems have 16-bit int, in managed languages int is 32-bit.
Luc Pattyn [Forum Guidelines] [My Articles]
- before you ask a question here, search CodeProject, then Google
- the quality and detail of your question reflects on the effectiveness of the help you are likely to get
- use the code block button (PRE tags) to preserve formatting when showing multi-line code snippets
|
|
|
|
|
[DllImport( "DCamLIB.dll" )]
private unsafe static extern bool DcamCapture( int* imageBuffer, Int32 bufferSize );
public unsafe void CaptureReverseX( Int32 bufferSize )
{
fixed ( int* buf = new int[ bufferSize ] )
{
if ( !DcamCapture( buf, bufferSize ) )
{
throw new DCamLIBException( this );
}
}
}
I am consuming an existing unmanaged 3rd party dll. I have the doc on it, I have all other functions implemented and working except for this one.
The following is the complete example code:
void CC9266SmpDlg::OnBtnCapture()
{
DWORD dwRetStatus = DCAM_WAITSTATUS_UNCOMPLETED;
WORD* pDataBuff = NULL;
int nWidth, nHeight, nImageSize;
nWidth = nHeight = nImageSize = 0;
DcamInitialize();
DcamOpen();
DcamSetDriveMode( DCAM_CCDDRVMODE_OPERATION, 3000 );
DcamSetGain( 1 );
DcamSetOffset( 10 );
DcamSetBinning( DCAM_BINNING_1X1 );
DcamSetCCDType( DCAM_CCD_TYPE0 );
DcamSetTriggerPolarity( DCAM_TRIGPOL_NEGATIVE );
DcamSetTriggerMode( DCAM_TRIGMODE_EXT_LEVEL1 );
DcamGetImageSize( &nWidth, &nHeight );
nImageSize = nWidth * nHeight;
pDataBuff = new WORD[ nImageSize ];
if( pDataBuff != NULL )
{
memset( pDataBuff, '\0', nImageSize );
DcamCaptureReverseX( pDataBuff, nImageSize * 2 );
while( TRUE )
{
DcamWait( &dwRetStatus, 0 );
if( dwRetStatus == DCAM_WAITSTATUS_COMPLETED )
{
break;
}
}
}
else
{
DcamClose();
DcamUninitialize();
return ;
}
DcamImgTiffSave( "c9266.tif", pDataBuff, nWidth, nHeight, 16, 12 );
delete [] pDataBuff;
DcamStop();
DcamClose();
DcamUninitialize();
}
|
|
|
|
|
Hi Jason,
The C demo code is interesting, here are some facts:
1. the image buffer needs to be allocated by the caller of the library, we got that right.
2. DcamGetImageSize is used to obtain the image sizes in pixels, and nImageSize is counting pixels, not bytes.
3. the demo code shows a big wait loop polling with DcamWait, so DcamCaptureReverseX is only starting the image capture, not waiting for it to get integrated, scanned, converted and presented in the array, hence the buffer is still untouched at that point in time.
and one strong suspicion:
1. Not sure what the second parameter of DcamCaptureReverseX is meant to be, they have 2*nImageSize, so that probably means size of the buffer in bytes, where each pixel takes 2 bytes (that fits the fact they have a WORD array, WORD=16-bit; however it is in contradiction with the memset where they clear only one byte per pixel); and your C# code does not match up, since you don't have the 2* at all.
my suggestions:
1. I would switch from int pixels to ushort pixels, allowing for 16-bit unsigned values. I now think your camera is a grayscale CCD with at best 16 bits of resolution. If less than 16 bits, the unsigned wouldn't matter at all. Don't forget the factor 2 in the DcamCaptureReverseX call.
2. you need to include a wait scheme; it needs to be inside the fixed block, since the buffer should not be unpinned for as long as the library is using it or going to use it.
Luc Pattyn [Forum Guidelines] [My Articles]
- before you ask a question here, search CodeProject, then Google
- the quality and detail of your question reflects on the effectiveness of the help you are likely to get
- use the code block button (PRE tags) to preserve formatting when showing multi-line code snippets
|
|
|
|
|