This may seem a stupid question to you, but i wanted to know that i downloaded the .netframework 3.0 and an addon for Visual stidio express C#, but its not giving up any visual development environment. how will that activate. Please guide..
int stride = bmData.Stride;
byte* p = (byte*)(void*)bmData.Scan0;
for (int y = 0; y < imtooperated.Width; y++)
for (int x = 0; x < imtooperated.Height; x++)
blah.Add(p[range]); //here error comes
p += 1;
p += stride;
You can use the Quality encoder parameter, which works only with the JPEG encoder. Here's how to specify a quality level when saving an image:
//Get all the image encoders and find the one for the JPEG format
ImageCodecInfo codec = null;
foreach(ImageCodecInfo c in codecs)
//Create a list of encoder parameters with space for a single entry
EncoderParameters encoderParams=new EncoderParams(1);
//Create a parameter to pass to the codec, with the category "Quality" and //the desired quality value (where 100 is 100% quality)
EncoderParameter encoderParam=new EncoderParameter(Encoder.Quality, 90L);
//Add the parameter to the list of encoder parameters
//Save the bitmap using the JPEG encoder and the parameter list
Unless the TIFF file uses JPEG compression (which is possible, but kind of pointless), the compression is lossless. That means that you can not change the quality of the compression as the compression does not make any quality compromises.
Unless you specifically need the TIFF format, you could try the PNG format instead. It is also lossless, but compresses a lot better. If you want lossy compression, use the JPEG format.
It doesn't work that way. Well, it's possible using server push, but that requires that you start a component in the browser that establishes a permanent connection between the browser and the server, and even then you would have to re-attach it to the running process on the server.
Normally everything that you send between the server and the browser is initiated by the browser. The server can not send anything to the browser unless the browser is first sending a request to the server.
You can use AJAX to poll the server at a specific interval, so that the server could respond with the result. The running threads would have to store the results in a static list, so that the AJAX request could pick up the lastest result from a specific thread. You would also have to give each thread a unique identifier to identify the results, and keep the identifier in the page, so that it could be sent in the AJAX call in order to pick up the result from the correct thread.
Cookies are not used for authentication, they are used to maintain settings between sessions. That's not really the same thing. You can make a cookie keep authentication settings, but at the point of login, your authentication system will verify those details, all the cookie provides is persistence.
Christian Graus - Microsoft MVP - C++ Metal Musings - Rex and my new metal blog
I'm working on a small program that manipulates an XML file, like the one below:
<code><?xml version="1.0" encoding="UTF-8"?>
<streetaddress>123 Anywhere Dr</streetaddress>
I am trying to make the script remove an old entry, then add a new entry at the end of the XML file (as you can see, this file only has one entry). I am trying to do the removing using the following code snipped:
<code> string filename = "data.xml";
XmlDocument xmlDoc = new XmlDocument();
string expr = "/Root/patient[name='" + this.clientName.Text + "']";
node = xmlDoc.SelectSingleNode(expr);
(this.clientName.Text contains the name of the client). The expression is matching just fine, if I add a MessageBox() to output node.OuterXml, everything displays fine. However, the RemoveChild() does nothing (it doesn't remove the field that was matched). The script goes on to write the edited entry, so I end up with two entries that are almost the same instead of a new one in place of an old one. What's wrong?
You really want to look for the patient using a better unique Id than name, and then you want to keep a reference to the existing patient node. This code will remove the name node only, which is obviously not what you want. It's probably easier to delete the existing record than to write code that either updates or edits, but either way, name is not a good unique Id, and you want to delete the patient record, not the name node.
Christian Graus - Microsoft MVP - C++ Metal Musings - Rex and my new metal blog
I have a function that will divide a loop iteration among threads. Each thread will be given its portion of work to do by giving it the array to iterate through and the start and end index that will be the range of indexes it will work on. I'm also assuming that I will not need to synchronize the access to the array since it works on each variable independently but I may be wrong. Here is what I have.
//i know this is not complete but all i need is to figure out how to divide the indexes uppublic Range ReturnIndexRanges(long indexes)
Range ranges = null;
Thread threads = new Thread[Environment.ProcessorCount];
long length = ((end - start) + 1) / Environment.ProcessorCount;
_start = start;
foreach (Thread t in threads)
t = new Thread(new ParameterizedThreadStart(ReturnRangesOfIndexes));
t.Start(new ThreadedReturnRangesOfIndexData(ranges, indexes, _start, length - 1));
_start += length;
length = end - length + 1;
//each thread will have its own range array when this is finished.return JoinDividedRanges(ranges);
public ThreadedReturnRangesOfIndexData(Range ranges, long indexes, long start, long end)
ranges_out = ranges;
indexes_in = indexes;
this.start = start;
this.end = end;
publiclong start, end;
public long indexes_in;
public Range ranges_out;
The ThreadedReturnRangesOfIndexData class is just a small class that hold some information such as the array of the indexes being passed into the method and the array of Ranges that will be returned. It will be like ref but since it is an array I do not need to add ref or out to it because an array is a reference type.
What I need is to figure out how to divide the indexes up evenly in the ReturnIndexRanges method at the top. This is my first attempt at creating a multi-threaded program so I would appreciate some tips if you have any. Should I just forget about threading?
1) I hope you dont go through all this if ProcessorCount==1
or maybe you should, just to make sure it is also correct in that case ?
2) in my experience it works a lot easier when you never use end, but instead
use end+1 (saves a lot of mistakes, and it fits the for-loop paradigma).
3) I would not try to divide the job in exactly even parts, when you split
100 in 48+52 it won't matter that much.
4) I would be very careful not to have data that resides in the same cache line
(more precisely in addresses that differ by less than the cache line size)
be written by different processors. It would cause a lot of invalidate,
flush and reload operations, and would be devastating for performance.
And yes this is hard to achieve in a high-level language.
I hope but am not absolutely sure, arrays are always allocated at
an address that is a multiple of a sufficiently high power of 2
(say a multiple of 256 B). You can check this somewhat by experimenting,
better is to have it specd somewhere, but I dont recall having seen that.
5) 3+4 together means: I would, still thinking of arrays, split on
boundaries that correspond to 256 B or more, hence round up to 64
when dealing with 4B ints, etc.
6) I do recall some Intel articles that suggested making structs artificially
larger when you can afford it, just to achieve my point 4 (e.g. for control
data, such as task control blocks).
One of them showed how you can really kill a multi-processor system: have
two threads do spin locks on 2 data items that belong to the same cache line !
7) on the other hand, if you over-align your data, you increase the possibility
of cache trashing; example: if you need repetitive access to only 1000 bytes,
but all these bytes are at a stride of 1KB, they would constantly miss in
a cache even as big as 2MB, since cache associativity nowadays is something
like 8-way, so there would only be 8 cache line candidates to cache the
requested data (the cache line candidate in each way being determined by
the lowest address bits (but excluding those that correspond to the
cache line width).
8) in conclusion, I suggest you use variables for your basic parameters
(such as number of processors, estimated safe allignment (my 256 B above), etc.
And once you have it running, just do some more experiments with slightly
different values for those variables, just to see what really helps.
Good luck, and please keep posting your progress.
Last Visit: 31-Dec-99 19:00 Last Update: 31-Jan-23 10:31