|
Hi guys,
I havent done image related stuff in C# as yet but i need to ask a small question. I have stored an image in my database (SQL Server 2000). The image field in the database has a datatype of image. Now, I want to retrieve the image and display it in a image box How do i do that? I have found this code but how do I modify it to show the image in a Imagebox?
<br />
MemoryStream stream = new MemoryStream ();<br />
SqlConnection connection = new <br />
SqlConnection (@"server=INDIA\INDIA;database=iSense;uid=sa;pwd=india");<br />
try<br />
{<br />
connection.Open ();<br />
SqlCommand command = new <br />
SqlCommand ("select Picture from Image", connection);<br />
byte[] image = (byte[]) command.ExecuteScalar (); <br />
stream.Write (image, 0, image.Length);<br />
Bitmap bitmap = new Bitmap (stream);<br />
Response.ContentType = "image/gif";<br />
bitmap.Save (Response.OutputStream, ImageFormat.Gif);<br />
} <br />
finally<br />
{<br />
connection.Close ();<br />
stream.Close ();<br />
}
|
|
|
|
|
Once you've read the image in as a byte[] (as you showed in your code snippet), write it to a stream, then create an image from that stream:
byte[] imageBytes = ...
MemoryStream stream = new MemoryStream(imageBytes);
Image image = Image.FromStream(stream);
stream.dispose();
|
|
|
|
|
umm..There might be a slight problem and I might even have posted in the wrong forum (my bad). Its a web application in c#. Its and Image control
|
|
|
|
|
I'm a vb programmer but i have to make a control in C# to be consumed by a vb .net application. I've found some help on the internet/newsgroups in order to scan an image from a twain source and send the image to the software. I've tested the program and it works fine, but now i'm using that code on a usercontrol in order to consume that usercontrol in vb .net application. Everything works fine (the scanner driver can be selected, the driver interface is shown and the user can interact with it,...), but the image cant be digitalized, for what seems to be caused by this line that i had to comment in order for the usercontrol to be builded
Application.AddMessageFilter(this);
When i insert the previous line, i get the following two errors:
1- "the best overloaded method match for 'System.Windows.Forms.Application.AddMessageFilter' (System.Windows.Forms.IMessageFilter)' has some invalid arguments
2- Argument '1': cannot convert from 'TwainMCtrl.UserControl1' to 'System.Windows.Forms.IMessageFilter'
Does anyone knows how can i solve this problem?
My thanks in advanced
Ricardo Furtado
|
|
|
|
|
The error message means that UserControl1 is not implementing the IMessageFilter interface. Is that what you intend to do?
|
|
|
|
|
I need to write a tool to present webpages on a screen in a showcase.
Therefor I use the webbrowser class in fullscreen. So long so good.
A problem occurs, when the presented webpage is longer than the screen. Then I want the software to SCROLL AUTOMATICALLY (by code) down and up slowly.
My idea to do that was to access the scrollbar. But how do I access it? How do I get a handle to it?
I am thankful for any suggestions howto realizethe automatic scrolling.
-- modified at 8:38 Saturday 27th January, 2007
|
|
|
|
|
I have written an application which interacts with the oracle database. There are 2-3 update queries in my program. There is only 1 select statement which executes at the start of the program. The problem with my program is I call the Update queries from a recursive method. I have noticed that the memory consumed by my program keeps increasing and occasionally decreases.
But If i minimize the application. The memory used drops down from 44k to a 7-8k and if i maximize it it starts increasing again. I believe that it is a Garbage collection problem.
Can any one help me how to force garbage collection to happen each time method returns
cheers....
o O º(`'·.,(`'·., ☆,.·''),.·'')º O o°
»·'"`»* *☆ t4ure4n ☆* *«·'"`«
°o O º(,.·''(,.·'' ☆`'·.,)`'·.,)º O o°
|
|
|
|
|
You can force garbage collection by calling GC.Collect(), but if the most your application is taking in memory is 44k, I'm not seeing the problem.
|
|
|
|
|
My apoligies it was 44 M rather than K's
this is just the memory it takes if I chop the process into doing 10% of the actual work i want to do.
If I perform the operation of on the actual data then for a start it takes 250 M +
o O º(`'·.,(`'·., ☆,.·''),.·'')º O o°
»·'"`»* *☆ t4ure4n ☆* *«·'"`«
°o O º(,.·''(,.·'' ☆`'·.,)`'·.,)º O o°
|
|
|
|
|
This isn't a GC issue. The task manager shows much much memory windows has given your program, not how much your program has allocated. Giving an app more memory is an expensive operation so windows gives it in large chunks, and it isn't returned to the OS when you release only a few bytes worth. An app will only give up the excess under limited circumstances. As you've seen minimization is one of them. A second is when it decides it has alot (megabytes) of excess memory that it probably won't need anytime soon. A third is when windows itself realizes it's running low on memory and sends requests to all the running processes to return any that they can.
--
Rules of thumb should not be taken for the whole hand.
|
|
|
|
|
t4urean wrote: But If i minimize the application. The memory used drops down from 44k to a 7-8k and if i maximize it it starts increasing again. I believe that it is a Garbage collection problem.
No it is not. What you are seeing is not the memory your application is using but the memory it has "reserved" for use. That will generally rise as the application is used. When it is minimised the reservation is removed and you see a value closer to the actual amount used.
There is nothing wrong with this and your application is most likely functioning properly. If you want to see the actual amount of memory used by your application then you should look at the performance counters for the process. You can access these through Administrative Tools --> Performance.
|
|
|
|
|
Do you think an article about how to and how not to measure managed memory (and why) would be useful? I've seen this question asked so many times.
|
|
|
|
|
S. Senthil Kumar wrote: Do you think an article about how to and how not to measure managed memory (and why) would be useful?
Yes.
|
|
|
|
|
S. Senthil Kumar wrote: o you think an article about how to and how not to measure managed memory (and why) would be useful?
Tnere isn't one already?
---
Year happy = new Year(2007);
|
|
|
|
|
|
Don't look at the Memory tab in Task Manager. Instead, look at the Virtual Memory tab, which will give you a better idea of your apps actual working set.
|
|
|
|
|
As a footnote to what the others have posted, they've all said that Task Manager show you how much memory your application has been allocated. You might be wondering why that number stays so high if you free up the memory in your app.
Well, your application doesn't get it's memory from Windows. It gets memory from the .NET Common Lanugage Runtime, or if your familiar with Java, that refers to a virtual machine. The virtual machine (.NET CLR) aquires blocks of memory from Windows and it's put into a pool called the Managed Heap, actually a couple of different pools, but for simplicity... Your application allocates objects by requesting blocks of memory from the Managed Heap. When these objects aren't needed any more, the memory is freed back to the Managed Heap, not Windows. If the CLR detects that it's not going to need as much memory as it has reserved, it shrinks the Managed Heap and returns that memory back to Windows.
I hope that makes it a little easier to understand.
Dave Kreskowiak
Microsoft MVP - Visual Basic
|
|
|
|
|
|
Hi
I got a problem with the project i'm building, i'm using StreamWriter and to append text to a textfile, so the text file look like this:
entry1
entry2
entry3
*blank row*
entry4
entry5
entry6
*blank row*
i do that with this code:
StreamWriter sw = File.AppendText("test.txt");<br />
sw.WriteLine(tb1.Text);<br />
sw.WriteLine(tb2.Text + " : " + tb21.Text);<br />
sw.WriteLine(tb3.Text);<br />
sw.WriteLine();<br />
sw.Flush();<br />
sw.Close();
Then i use a loop and array to read those files into my application.
TextReader TR = new StreamReader("test.txt");<br />
int NumberOfLines = 20;<br />
string[] ListLines = new string[NumberOfLines];<br />
for (int i = 1; i < NumberOfLines; i++)<br />
{<br />
ListLines[i] = TR.ReadLine();<br />
}
Now i got the problem, i need to be able to delete/change the "packs" between the blank line, was thinking something like making a backup of the file and re-writing it, without the selected pack (using a listbox to select) or in some way replace that pack with what the user types in instead when i hit the delete or change button. The problem is i dont know how to get the "new" text to the same position as the old when i change it. Anyone got an idea?
Sorry if i confuse you
--
Light is faster than sound... Thats why some people look smart till they start to talk.
|
|
|
|
|
How about:
TextReader tr = new StreamReader("test.txt");
int numberOfLines = 20;
string[] listLines = new string[NumberOfLines];
int i=0;
while(i < numberOfLines)
{
string line = tr.ReadLine();
if (line == null)
break;
if (line == string.Empty)
continue;
listLines[i] = line;
i++;
}
|
|
|
|
|
Is there any reason why you have to work with text files? If not I would do something like this:
(There's a bug in the pre tag... it doesn't like generics in examples!)
using System;
using System.Collections.Generic;
using System.IO;
using System.Xml.Serialization;
[Serializable()]
[XmlRootAttribute("Pack")]
public class Pack
{
private List<string> items;
public Pack()
{
items = new List<string>();
}
public List<string> Items
{
get { return items; }
set { items = value; }
}
public void Load(string filename)
{
XmlSerializer serialiser = new XmlSerializer(typeof(Pack));
Stream stream = new FileStream(filename, FileMode.Open, FileAccess.Read);
this.Items = ((Pack)serialiser.Deserialize(stream)).Items;
stream.Close();
}
public void Save(string filename)
{
XmlSerializer serialiser = new XmlSerializer(typeof(Pack));
Stream stream = new FileStream(filename, FileMode.Create, FileAccess.Write);
serialiser.Serialize(stream, this);
stream.Close();
}
}
|
|
|
|
|
bobsugar222 wrote: (There's a bug in the pre tag... it doesn't like generics in examples!)
That's because it doesn't html encode the text, so the browser thinks that it is a broken html tag and ignores it.
You can use < and > to display the < and > characters.
---
Year happy = new Year(2007);
|
|
|
|
|
Sorted. Cheers
|
|
|
|
|
Thank you for your answers. The reason i work with text files is that this is my first "real" c# project, and i'm not very skilled in using it. Was mainly playing around trying to find a way to solve my problems. Found a number of problems with it though so thinking of using access database instead.
If you could add some comments to the above code example i'd be grateful, dont really understand every part of it.
Thanks
--
Light is faster than sound... Thats why some people look smart till they start to talk.
|
|
|
|
|
does someone know how to add sheet into a workbook
if i am writing in C#?
|
|
|
|