|
N a v a n e e t h wrote: Without any error message ? Have you looked at the event viewer for any error report.
Yeah, checked that - nothing there.
Another weird aspect of this is that I wrote a very simple app that downloads a file (from the same server, no less) using WebClient.DownloadFileAsync, and it works fine. I even used the code from the app that doesn't work. How bizarre is that?
"Why don't you tie a kerosene-soaked rag around your ankles so the ants won't climb up and eat your candy ass..." - Dale Earnhardt, 1997 ----- "...the staggering layers of obscenity in your statement make it a work of art on so many levels." - Jason Jystad, 10/26/2001
|
|
|
|
|
Hello Guys..
I am currently working on a project where I am suppose to read High R3es MultiPage Tiff images.
I am able to display the First page But I dont know hot to Loop tru the multiple pages in perticuler Image file.
If Anyone can explain.. tat will be gr8!!
Environment : .net 3.5
Thanks,
Niks
|
|
|
|
|
I was also looking for something like this, where I could handle individual pages of a multipage tiff and re order them (move first page to the back or remove it - cover sheets, etc).
This may allow you to iterate through the pages, but for me it was blowing up badly when I tried using the Bitmap.SaveAdd method to save the pages (GDI+ Exception). You may have better luck if you don't need to save these.
frameDimension = System.Drawing.Imaging.FrameDimension.Page
pageCount = inputFile.GetFrameCount(frameDimension)
For x As Integer = 0 To pageCount - 1
'set page x as the active frame
inputFile.SelectActiveFrame(frameDimension, x)
nextPage = New System.Drawing.Bitmap(inputFile) 'may need overload for size
'outputBitmap.SaveAdd(nextPage, encParams) <--blows up on me... you may not need to worry about it.
Next 'x
The best thing I could come up with to SAVE images was to use iTextSharp and do something like this... (copy and paste - I am doing many other things in between these lines ). You may not need this, but here it is anyway.
bmpImage = New System.Drawing.Bitmap(InputTIFFFile)
intTIFFPages = iTextSharp.text.pdf.codec.TiffImage.GetNumberOfPages(objRA)
For c As Integer = 0 To intTIFFPages - 1
objImage = iTextSharp.text.pdf.codec.TiffImage.GetTiffImage(objRA, c + 1)
'Do stuff with your images here.
Next 'c
These are all from 1.1 framework.
modified on Friday, July 18, 2008 7:22 AM
|
|
|
|
|
Hello Astanton,
thanks for reply.
I am able to iterate tru the diff pages of Tiff, but the problem I am facing is I want to dispay each frame as I go along..
Like Next and Back bottons will allow me to move with the frams. I was not able to get the file reference.
Say, I have the below code,
string tifimgFileNM = "c:\\images\\test.tif";
Bitmap tifImg = new Bitmap(tifimgFileNM);
int pageCount = tifImg.GetFrameCount(FrameDimension.Page);
if (pageCount > 1)
{
for (int i = 0; i < pageCount; i++)
{
tifImg.SelectActiveFrame(FrameDimension.Page, 0);
Bitmap img = (Bitmap)tifImg.Clone();
}
}
Now @ //XXXXXXXXXXXXXXXX, i want to assign selected Frame image to Picture Box. HOw I am suppose to do tat.. normally we can write
PictBox.Load("c:\\images\test.tif");
how Can i refer it here..??
THanks,
Niks
|
|
|
|
|
Dig this....
http://www.bobpowell.net/addframes.htm[^]
Basically he explains that you can do something like this....
int pageCount;
int curPage;
List<bitmap> tifPages;
private void Form1_Load(object sender, EventArgs e)
{
string tifimgFileNM = ".\\multipage.tif";
Bitmap tifImg = new Bitmap(tifimgFileNM);
pageCount = tifImg.GetFrameCount(FrameDimension.Page);
tifPages = new List<bitmap>(pageCount);
if (pageCount > 1)
{
for (int i = 0; i < pageCount; i++)
{
tifImg.SelectActiveFrame(FrameDimension.Page, i);
Bitmap tmp = new Bitmap(tifImg.Width, tifImg.Height);
Graphics g = Graphics.FromImage(tmp);
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor;
g.DrawImageUnscaled(tifImg, 0, 0);
g.Dispose();
tifPages.Add(tmp);
}
}
curPage = 0;
PictBox.Image = tifPages[curPage];
PictBox.Refresh();
lblPageNo.Text = "Page " + Convert.ToString(curPage + 1) + " of " + Convert.ToString(pageCount);
}
private void btnNext_Click(object sender, EventArgs e)
{
curPage++;
if (curPage + 1 > pageCount)
{
btnNext.Enabled = false;
}
else
{
btnNext.Enabled = true;
}
PictBox.Image = tifPages[curPage];
PictBox.Refresh();
lblPageNo.Text = "Page " + Convert.ToString(curPage + 1) + " of " + Convert.ToString(pageCount);
}
private void btnPrev_Click(object sender, EventArgs e)
{
curPage--;
if (curPage - 1 < 0)
{
btnPrev.Enabled = false;
}
else
{
btnPrev.Enabled = true;
}
PictBox.Image = tifPages[curPage];
PictBox.Refresh();
lblPageNo.Text = "Page " + Convert.ToString(curPage + 1) + " of " + Convert.ToString(pageCount);
}
}
</bitmap></bitmap>
|
|
|
|
|
I am senting data in a flat file to a client who is parsing the data using Cobol and he is
asking me to format money with an implied decimal point padded to 6 charaters in length.
For example given $15 dollars he wants me to send either
001500 or 1500 I am not sure which yet but the problem is the same either way.
I have a generic tool that allows me to pick a field to send and also to provide the
formating to apply.
Here is the method I call each time a number needs to be formatted:
static public string ProcessNumber(string amount, string format)
{
decimal temp;
bool results = decimal.TryParse(amount, out temp);
if(results)
{
string localFormat = string.IsNullOrEmpty(format) ? "0.00" : format;
string convertedValue = temp.ToString(localFormat);
return convertedValue;
}
return amount;
}
Normally, for money I would use the "0.00" or "000.00" format specifier when
yields 15.00 or 015.00 respectively.
I don't want to have to treat this request as a one off and write special code if I don't have to.
I can't assume in any given case that the decimal will or won't be implied.
Is there a way to apply a format to yield a textual representation of a number with an implied decimal place?
|
|
|
|
|
Multiply by one hundred?
amount.Replace ( "." , "" ) ?
|
|
|
|
|
Yes, that works but not under the contraints I layed out in my question.
The code doesn't know where the decimal is implied or not. If I used your
solution it would be right if for this client as he wants an implied decimal
but wrong for everyone who doesn't want an emplied decimal point.
I am looking for a workaround to not have to pass in either the decimal is implied
or not hense my question about how to solve this via applying a format.
|
|
|
|
|
You aren't likely to get too much help when you keep 1 voting people. BTW - there is a solution to your problem, and it relies on you using a pattern called Inversion of Control. (There are other solutions, but this one is a good one).
|
|
|
|
|
I didn't vote a one. I was given the choice of Yes or No was this answer helpful. I selected no.
I didn't even realize I was voting I was just answering a yes or no question.
Thanks I will look at your suggestion.
BTW Your answer didn't have the Yes or No question.
|
|
|
|
|
smesser wrote: BTW Your answer didn't have the Yes or No question.
That's because mine was a General message and not an Answer. Take a look at the Message Type for this.
|
|
|
|
|
smesser wrote: not under the contraints I layed out
Which are fairly silly. Why take a decimal, convert to string, convert back to decimal, and then convert back to string again?
Why wouldn't the caller simply use (val * 100.0M).ToString ( "000000" ) and be done with it? What benefit would your method provide?
|
|
|
|
|
The contrains aren't silly they are provided by the client.
My problem comes in trying to make a tool generic enough to provide
all clients with their needs.
Again this method would work if all clients wanted to use an assumed decimal point.
In the end I ended up using the format string "000000%" which multiplies by one hundred thus
given me the assumed decimal place. Then in my ProcessNumber method I remove the "%" if it exists.
The "%" will only exist if I am using the assumed decimal approach and I can still
use standard formatting for all clients.
Problem solved.
|
|
|
|
|
As long as you have the "000000%" format, why not just use it and not bother with this method?
I still see no point for this method. What benefit does it provide? What's the point?
I suspect you're doing something upstream that you shouldn't be.
|
|
|
|
|
The point is that the format specifier "000000%" multiplies by 100 and adds the percent sign.
So, given 15.00 the result of applying the above format string yields 001500%.
The percent sign is undesirable and needs to be striped out.
So the method I mention always strips out the % if it exists as I will never need to send a
percentage. So, I have accomplished my needs by still allowing standard formatting to be
used.
I could have created a custom format specifier "000000i", and then in my number processing
method look for i and then use implied decimal formatting.
|
|
|
|
|
Yes, I see that, but what I still don't understand is why you are doing
decimal.Parse ( d.ToString() ).ToString ( "000000%" ).Replace ( "%" , "" )
when
d.ToString ( "000000%" ).Replace ( "%" , "" )
should be all you need.
If the calling routine has the format string, why doesn't it simply use it?
Why do a bare ToString and then call this method... which first undoes the ToString?
Why not at least have this method take the decimal directly rather than a string?
|
|
|
|
|
You have assumed that I get the number as a decimal.
I get all the values as a string and also their type.
I also wanted to be able to default to "0.00 if no formatting
was supplied as most client are fine with that format.
1. I parse to decimal as I get it as a string.
2. I default to 0.00 if no format is given
3. I apply the formatting
4. I remove the % if exists
5. I return it as a string since if will be written to a flat file.
If the calling routine did the work and then I need this functionality some
where else then I have to maintain multiple copies. Maintaining the code in
a method allows me to for example default to 0.00
Besides at this point we are trying to impose our coding style on each other
which is fruitless. I appreciate your ideas but you haven't raised any points
that help me solve my problem any better.
|
|
|
|
|
Why do you re-write you tool such that you can choose which ever format you want to use.
Option 1: Include decimal point
Option 2: Exclude decimal point
|
|
|
|
|
That, can be done as well but then your adding code to the UI part of the tool
that will be used by possibly one client on only one type of field.
I know I am being picky. Currently an item that can be written to a flat file
has the following options:
Field:
Length: 10
Type: (float, int, etc)
Format: 0.00
Padding: Space
Padding Side: Right
Default Value: None
If I were to add a new field Implied Decimal
It would only apply to one type of all the types and therefore essentially a hack, in my opinion.
I realize that if the client can't fix this on his end I may have to put in a hack, but I am
trying to leave that as a last resort.
|
|
|
|
|
It is quite common to have "implied decimal" in an interface file, so it's not really a hack.
You should not need to have a new field, just need to make your tool more flexible in configuring the format of various numeric values (rates, amount, exchange rate).
|
|
|
|
|
Your probaby right.
However, I was trying to stick with the standard string formatting options.
In the end as I noted above I did the following:
I ended up using the format string "000000%" which multiplies by one hundred thus
given me the assumed decimal place. Then in my ProcessNumber method I remove the "%" if it exists.
The "%" will only exist if I am using the assumed decimal approach and I can still
use standard formatting for all clients.
Problem solved.
|
|
|
|
|
Just pray that the system doesn't use currencies that has no "cent", ie Won, Dong, Yen.
|
|
|
|
|
Yeah, I took that into consideration, the amounts are always even dollar amounts and always US currency.
thanks
|
|
|
|
|
I have a TreeView on my form as well as a ListBox. I have an Artist, Album and Song class which each extend the TreeNode class. The ListBox holds a list of songs which will be copied to a removable device. Now what I want to do is be able to drag an artist node, album node or a song node onto the list box and have all the songs under the dropped node show up in the ListBox. I know I need to use the DragDrop, Drag Enter and/or DragLeave events but I don't know how.
|
|
|
|
|