|
if it is asp or ajax calendar control then is it possible to export information to google,yahoo calendar.. Any samples...
thanks..
|
|
|
|
|
madhukk wrote: if it is asp or ajax calendar control then is it possible to export
Yes!
Have a look at this: Google API[^]
|
|
|
|
|
I have a web application that allows users to upload images. On upload, the image is saved to disk, then passed to a routine that crops and resizes it to a specified size, using the System.Drawing.Graphics/Imaging classes - all pretty standard stuff, and it works.
Usually. Every now and then it fails, and the only error message I can catch is "A generic error occurred in GDI+." Looking at the files uploaded, my deduction (call me Sherlock) is that they are images from digital cameras, and that it may be the embedded photo information within such files that is causing the problem. I note that if I download them (via FTP), then open them in Paint.NET (say) then save them (without making any (apparent) changes), I can then load them via my application without this error occuring.
I would be grateful if anyone has any ideas about what I need to do to enable my application to handle these files without error. Thanks...
|
|
|
|
|
is it specific files that fail consistently?
how about you try it, and if it fails, you try again say 5 seconds later. I have a theory...
|
|
|
|
|
Well, always JPG files - tried your suggestion, but it didn't work. But it got me thinking, and I did track down the error to the actual line, which was where the modified file was being saved. I had written the code to always save the modified file in the same image format as the original, but decided to try always saving it as a PNG file instead - and this seems to have solved the problem! So, thanks anyway - not 100% sure what for exactly but I've been stuck on this for ages, and now at least I have a working solution!
|
|
|
|
|
Almost everything that goes wrong in Image.Save (and a few more methods) will result in a "General GDI+ error".
Since you now decided to provide some of the essential information (but no code) to figure out which of many possible causes is most likely, my best guess is you did not close the input file. Some ways of doing that is by loading an image in a PictureBox (PB.ImageLocation=...), or by loading an image from file (Image.FromFile or Image.FromStream).
Using a different output format and file extension is a sure way to avoid those problems, but it also tells me the core problem is still present, resulting in less than optimal behavior of your app as it will keep files open and images in memory much longer than required. You should fix that.
You're welcome anyway.
|
|
|
|
|
OK, thanks... I didn't post code because I hoped a pointer might be enough for me, but... and then I found a working slution. But still, it would be good to know the "proper" way to solve it! If you can stand looking at some VB code, and don't mind giving it the once over, that'd be great - but as I say, I at least have a working solution, so...
also, just to clarify: my issue only occurs with jpg files (AFAIK), but I didn't mean to imply that it always happens with these - just that when it does, it's ben with jpg's.
Public Function ResizeCropImage(ByVal sFilepath As String, ByVal ext As String) As Integer
' sFilepath = relative path to file, including it's name; ext = file extension
' this file has already been saved from File Upload control via it's usual SaveAs method
Try
Dim FullSizeImage As Image
FullSizeImage = Image.FromFile(HttpContext.Current.Server.MapPath(sFilepath))
If (FullSizeImage.Height < 200) Or (FullSizeImage.Width < 200) Then
FullSizeImage.Dispose()
' image is too small
System.IO.File.Delete(HttpContext.Current.Server.MapPath(sFilepath))
Return 0
End If
Dim imf As System.Drawing.Imaging.ImageFormat
Select Case ext
Case ".gif"
imf = System.Drawing.Imaging.ImageFormat.Gif
Case ".png"
imf = System.Drawing.Imaging.ImageFormat.Png
Case Else '".jpg", ".jpeg"
imf = System.Drawing.Imaging.ImageFormat.Jpeg
End Select
Dim tmp As Bitmap
Dim gX As System.Drawing.Graphics
Dim bTidy As Boolean = True
If (FullSizeImage.Height = 200) And (FullSizeImage.Width = 200) Then
'nothing to do
bTidy = False
Else
' resize/crop to 200 x 200
Select Case FullSizeImage.Height / FullSizeImage.Width
Case Is < 1 'landscape image
Dim x1 As Integer
tmp = New Bitmap(200, 200)
tmp.SetResolution(FullSizeImage.HorizontalResolution, FullSizeImage.VerticalResolution)
x1 = CInt((FullSizeImage.Width / 2) - (FullSizeImage.Height / 2))
gX = System.Drawing.Graphics.FromImage(tmp)
gX.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic
gX.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality
gX.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality
gX.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality
gX.DrawImage(FullSizeImage, New Rectangle(0, 0, 200, 200), New Rectangle(x1, 0, FullSizeImage.Height, FullSizeImage.Height), GraphicsUnit.Pixel)
Case Is > 1 ' portrait image
' similar code for portrait images - omitted here to save space/bandwidth
Case Else ' square image,
' similar code for square images - omitted here to save space/bandwidth
End Select
' save with amended filename (not to conflict with original)
tmp.Save(HttpContext.Current.Server.MapPath(sFilepath.Replace(ext, "_c" & ext)), imf)
tmp.Dispose()
gX.Dispose()
End If
' clean up
FullSizeImage.Dispose()
If bTidy Then
' delete original
System.IO.File.SetAttributes(HttpContext.Current.Server.MapPath(sFilepath), FileAttributes.Normal)
System.IO.File.Delete(HttpContext.Current.Server.MapPath(sFilepath))
' rename just saved amended file with filename of original
System.IO.File.Move(HttpContext.Current.Server.MapPath(sFilepath.Replace(ext, "_c" & ext)), HttpContext.Current.Server.MapPath(sFilepath))
End If
Return 1
Catch ex As Exception
' write error to log file
writeLog("funcs/ResizeCropImage", ex.Message, Err.ToString)
Return -1
End Try
End Function
cheers..
modified on Wednesday, July 28, 2010 4:22 AM
|
|
|
|
|
Hi,
I assume this is the code that includes your work-around, not the one that fails occasionally. If you remove the extension modifications, it may fail because, under some conditions, you attempt an Image.Save whereas your original image still is alive since FullSizeImage.Dispose() only occurs later. The fix is to move FullSizeImage.Dispose() up and put it in between gX.DrawImage() and tmp.Save()
I have some more comments:
1.
your big three-way switch is unnecessary, you could handle portrait/landscape/square images all the same by using something like:
x1 = CInt((FullSizeImage.Width / 2) - (FullSizeImage.Height / 2))
y1=-x1
if x1<0 then x1=0
if y1<0 then y1=0
2.
I don't think you need bTidy at all.
3.
I'm puzzled by your call to SetAttributes; it seems very likely you either don't need it at all, or you also need it when the input image is "too small".
4.
I would suggest you replace all those magic "200" constants by a single variable, and probably make it a function parameter.
Overall I would suggest you look for simpler ways to organize your code; anytime you duplicate statements (or constants) you should try and find a better way, the DRY principle (Don't Repeat Yourself) is pretty universal.
|
|
|
|
|
No, this is the "old" code that fails...
1. yes, I know...
2. probably
3. yes - it was jst something I tried to (maybe) help, but you're right
4. well, yes, but for thsi app that isn't necessary as it will remain fixed
thanks..
|
|
|
|
|
<br />
Integrator:<br />
<Select name=Integrator id=Integrator Size=1 onChange=<br />
<%<br />
dim sqlTemp<br />
dim arrRSTemp<br />
dim ConnTemp : Set ConnTemp = cf_OpenConnection()<br />
<br />
sqlTemp = "Select * from Integrator where atnINtegratorID = 1"<br />
set arrRSTemp = Conn.Execute(sqlTemp)<br />
<br />
Response.Write "Integrator Address: " & arrRSTemp("txtIntegratorAddress")<br />
Response.Write "<br>"<br />
<br />
%>><br />
<br />
<option value=''>**No Integrator**</option><br />
<%<br />
do until arrRS_Integrator.EOF<br />
Response.Write "<option value='" & arrRS_Integrator.Fields(0).value & "'"<br />
Response.Write ">" & arrRS_Integrator.Fields(1).value & "</option>" & vbcrlf Call arrRS_Integrator.moveNext()<br />
loop<br />
%><br />
</select><br />
</code><br />
<br />
<br />
<br />
I have a combo which is used to dropdown some info. Now i want do some coding in the onchange event, as shown above. is this possible? please help me in this, because the code above is not working a bit.<br />
<br />
NB: I'm a beginner
|
|
|
|
|
AFAIK, this is not the correct way of doing it.
You must know that onChange function of the Select box will be executed on the client side. You have written code that will be executed on the server, which is wrong. So what you could do is:
onChange of combo box, write a javascript function which will post back the page to itself. Pass the selected id in the QueryString. Now check for the corresponding QueryString in the page.
If value is not null, write the code to get values from database (which you have already written).
The important thing here is you need to understand how Classic ASP works. Once you know that, it would be easy for you to write code using Classic ASP.
Xandip wrote: NB: I'm a beginner
I would suggest you to go for ASP.NET if you are starting with Classic ASP. It has a lot of advantages over Classic ASP. You can always Google for them.
..Go Green..
|
|
|
|
|
Hello,
I am working on a little tool to help multiple people write articles and I have hit a snag. Each article needs to have a unique, sequential id. This alone is not that difficult but I am wondering what the best way to implement it is as it seems like a waste to create a whole database just for tracking a "next id" field.
I was thinking of using a flat file (text/xml?) that the asp.net page reads from and then writes the new number right away. However, in that case how do I control concurrency (i.e. what if one person is reading in the split second before another writes their number back)? Or is this really an issue in something this simple?
Any advise on an appropriate method for keeping a "next id" information would be greatly appreciated.
|
|
|
|
|
If you can use a string, try System.Guid.NewGuid().ToString(). It's always unique.
Read this[(MSDN)]
|
|
|
|
|
But is that sequential? the OP mentioned sequential numbers.
|
|
|
|
|
Sorry. Sequential - i did not recognize it. It's late at night
|
|
|
|
|
Don't overlook the power of an Access database. (.mdb)
In access you have a field type which is "Autonumber"
In your website you might want to collect the following:
Date Time that number was requested
User who requested the number
Working title of the article
Your key to this table could be the Autonumber field.
Very easy to hook something like this up. Should be about 1 day of effort.
Access is perfect for this type of application.
|
|
|
|
|
why can't you slap some simple static class to do the job for you.
public static class SequentialNumbers
{
private static Object obj = new Object();
private static UInt16 lastNumber = UInt16.MinValue;
public static UInt16 GetNext()
{
lock (obj)
{
return ++lastNumber;
}
}
}
|
|
|
|
|
While there were several good answers, I have decided to go with this one with the slight change that I will write the number to disk each time it's generated. I know that will limit performance to an extent due to IO but I think it is important for to maintain the Durability of the process (i.e. if it crashes at some point, someone doesn't have to scour through every article to find out what the last valid number was).
A follow up question might be how to gently handle situations where people are waiting on the lock but I will try to find more information on this myself first before asking.
|
|
|
|
|
What does your tool do if that is the only thing it would use a database for? You don't track which authors contributed to an article? You don't have the titles stored separately for convenient listing? DateTime.Now.Ticks would give you a reasonably unique ordered but non-sequential ID.
|
|
|
|
|
Yeah, I realize it sounds a bit odd. Basically, it's a kludge to make it easier to write articles that are stored in another product that is too unwieldy to use. So yes all that information does get stored but in a DB that I have no access to. Thus my app only cares about the act of creating the article and not what happens to it afterward....
|
|
|
|
|
Can you use that other system to generate the ID by creating an article stub?
|
|
|
|
|
Well if all you need is a simple way to do this you might try loading the last id from a flat text file or xml in Application_Start throw that into the application state and then in Application_End save it to the database. This way you dont have to worry about concurrency issues because the id is stored in memory and is only written back to the file when the application ends.
void Application_Start(object sender, EventArgs e)
{
int id;
int.TryParse(System.IO.File.ReadAllText(Server.MapPath("~/nextid.txt")), out id);
Application["ID"] = id;
}
void Application_End(object sender, EventArgs e)
{
System.IO.File.Delete(Server.MapPath("~/nextid.txt"));
System.IO.File.WriteAllLines(Server.MapPath("~/nextid.txt"), new string[] { Application["ID"].ToString() });
}
public int GetNextID()
{
Application["ID"] = Convert.ToInt32(Application["ID"]) + 1;
return (int)Application["ID"];
}
Ofcourse you are going to want to add stuff like checking for the file before reading it and some error handling but im sure you get the point.
If at first you don't succeed ... post it on The Code Project and Pray.
|
|
|
|
|
Hi
I want to make a tips&tricks page;
I want to create something like codeproject Forums page.
What is your idea about the Component used to make this page in codeproject?
I mean the component that our questions and answers is exist and we can see our answers.(we click on the question and we can read our answer)
|
|
|
|
|
|
Hi i am trying to use data relation in my program.I have two repeaters used one nested another.
part of code is shown below:
void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
RepeaterItem item = e.Item;
if ((item.ItemType == ListItemType.Item) ||
(item.ItemType == ListItemType.AlternatingItem))
{
Repeater2 = (Repeater)e.Item.FindControl("Repeater2");
DataRowView drv = (DataRowView)item.DataItem;
Repeater2.DataSource = drv.CreateChildView("categoryItem");
Repeater2.DataBind();
}
}
the error is :
<pre>
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.ArgumentException: The relation is not parented to the table to which this DataView points.
Source Error:
Line 121: Repeater2 = (Repeater)e.Item.FindControl("Repeater2");
Line 122: DataRowView drv = (DataRowView)item.DataItem;
Line 123: Repeater2.DataSource = drv.CreateChildView("categoryItem");
Line 124: Repeater2.DataBind();
This categoryItem is from this code:
objDA.Fill(ds);
Repeater1.DataSource = ds;
Repeater1.DataBind();
DataColumn c1 = ds.Tables["category"].Columns["ID"];
DataColumn c2 = ds.Tables["Item"].Columns["ProposalID"];
dRel = new DataRelation("categoryItem", c1, c2);
ds.Relations.Add(dRel);
Can anyone please figure it out why that error is there ?
suchita
modified on Tuesday, July 27, 2010 9:20 AM
|
|
|
|
|