Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   ASP .Net (http://www.velocityreviews.com/forums/f29-asp-net.html)
-   -   Dynamic Image Resize and Data Type issues (http://www.velocityreviews.com/forums/t118270-dynamic-image-resize-and-data-type-issues.html)

webonomic 01-26-2006 03:29 PM

Dynamic Image Resize and Data Type issues
 
Converting data types

I'm trying to do some image manipulation. This code project article
(http://www.codeproject.com/csharp/imageresize.asp) has a great method
I want to modefy. Here it is:

static Image ScaleByPercent(Image imgPhoto, int Percent)
{
float nPercent = ((float)Percent/100);

int sourceWidth = imgPhoto.Width;
int sourceHeight = imgPhoto.Height;
int sourceX = 0;
int sourceY = 0;

int destX = 0;
int destY = 0;
int destWidth = (int)(sourceWidth * nPercent);
int destHeight = (int)(sourceHeight * nPercent);

Bitmap bmPhoto = new Bitmap(destWidth, destHeight,
PixelFormat.Format24bppRgb);
bmPhoto.SetResolution(imgPhoto.HorizontalResolutio n,
imgPhoto.VerticalResolution);

Graphics grPhoto = Graphics.FromImage(bmPhoto);
grPhoto.InterpolationMode = InterpolationMode.HighQualityBicubic;

grPhoto.DrawImage(imgPhoto,
new Rectangle(destX,destY,destWidth,destHeight),
new Rectangle(sourceX,sourceY,sourceWidth,sourceHeight ),
GraphicsUnit.Pixel);

grPhoto.Dispose();
return bmPhoto;
}

However, I have some business rules for the source image size.
- height or width cannot be less than 100px, display error in
<asp:label> to user
- height or width cannot exceed 1000px, display error in <asp:label> to
user

The dest image has rules too:
- if source image has height > width, set dest height = 100px,
proportionally set the dest width
- if source image has width > height, set dest width = 100px,
proporionally set the dest height
- if source height = source width, set dest height and width both to
100px

In the case of destHeight:
- if sourceWidth > sourceHeight;
- destWidth = 100px;
- destHeight = ((destWidth / sourceWidth) * 100)

My issues are:
1) I am having data type issues with getting destHeight or destWidth in
this manner.
2) I don't know the proper way to setup the business rules in this
method. If statement? Switch statment?

Here is my method so far:

static System.Drawing.Image ScaleByPercent(System.Drawing.Image
imgPhoto)
{


//float nPercent = ((float)percent / 100);
int percent;

int sourceWidth = imgPhoto.Width;
int sourceHeight = imgPhoto.Height;
int sourceX = 0;
int sourceY = 0;

int destX = 0;
int destY = 0;
int destWidth = 0; //(int)(sourceWidth * nPercent);
int destHeight = 0; //(int)(sourceHeight * nPercent);


string theMessage = "";


if (sourceHeight > 100 || sourceWidth > 100)
{
if (sourceHeight < 1000 || sourceWidth < 1000)
{
if (sourceHeight > sourceWidth)
{
destHeight = 100;
//what do I do here ??
percent = (float)((destHeight / sourceHeight) *
100);
destWidth = (int)(sourceWidth * percent);
}
else if (sourceWidth > sourceHeight)
{
destWidth = 100;
//what do I do here ??
percent = (float)((destWidth / sourceWidth) * 100);
destHeight = (int)(sourceHeight * percent);
}
else if (sourceWidth == sourceHeight)
{
destHeight = 100;
destWidth = 100;
}
else
{
theMessage = "Image was both greater than 100 and
less than 1000, something else is wrong";

}

theMessage = "Image must be less than 1000 pixels";

}

theMessage = "Image must be more than 100 pixels";

}

Bitmap bmPhoto = new Bitmap(destWidth, destHeight,
PixelFormat.Format24bppRgb);
bmPhoto.SetResolution(imgPhoto.HorizontalResolutio n,
imgPhoto.VerticalResolution);

Graphics grPhoto = Graphics.FromImage(bmPhoto);
grPhoto.InterpolationMode =
InterpolationMode.HighQualityBicubic;

grPhoto.DrawImage(imgPhoto,
new Rectangle(destX, destY, destWidth, destHeight),
new Rectangle(sourceX, sourceY, sourceWidth, sourceHeight),
GraphicsUnit.Pixel);

grPhoto.Dispose();
return bmPhoto;

}


webonomic 01-26-2006 08:34 PM

Re: Dynamic Image Resize and Data Type issues
 
Well, I'm starting to answer my own question. For the data types, I
did the following to test things out:

int a = 101;
int b = 999;

int z = 100;
double c = (a / b)*z;
lbl.Text = c.ToString();


double d = ((Convert.ToDouble(a)) / Convert.ToDouble(b))*
Convert.ToDouble(z);
lbl2.Text = d.ToString();

int y = Convert.ToInt32(d);
lbl3.Text = y.ToString();

d = Math.Round(d);
lbl4.Text = d.ToString();

Now I know how to get my destWidth or destHeight int's.

What I still would like to know is how I should setup all of my
business rules. If statements or a switch?


webonomic 01-26-2006 08:40 PM

Re: Dynamic Image Resize and Data Type issues
 
I'll answer my own question even more. For some reason I thought Case
statements could handle expressions when they do not. Expressions like
(x > y). So I have to use the If statements.

I guess all is good. It's a matter of playing around with the code now.



webonomic wrote:
> Well, I'm starting to answer my own question. For the data types, I
> did the following to test things out:
>
> int a = 101;
> int b = 999;
>
> int z = 100;
> double c = (a / b)*z;
> lbl.Text = c.ToString();
>
>
> double d = ((Convert.ToDouble(a)) / Convert.ToDouble(b))*
> Convert.ToDouble(z);
> lbl2.Text = d.ToString();
>
> int y = Convert.ToInt32(d);
> lbl3.Text = y.ToString();
>
> d = Math.Round(d);
> lbl4.Text = d.ToString();
>
> Now I know how to get my destWidth or destHeight int's.
>
> What I still would like to know is how I should setup all of my
> business rules. If statements or a switch?




All times are GMT. The time now is 09:38 PM.

Powered by vBulletin®. Copyright ©2000 - 2014, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.