Salve a tutti
sono alle prime armi con asp.net...
Il mio problema è che non riesco a utilizzare i parametri di interpolazione per le immagini, cambio le impostazioni di "InterpolationMode" e di tutti i parametri che riguardano la qualità dell'immagine ma il risultato non cambia cioè i bordi di alcuni tratti appaiono seghettati, mentre la compressione ed il ridimensionamento funzionano..
ecco il codice:
Codice PHP:<%@ Page Language="C#" ContentType="text/html" ResponseEncoding="iso-8859-1"%>
<%@ import Namespace="System.IO" %>
<%@ import Namespace="System.Drawing" %>
<%@ import Namespace="System.Drawing.Imaging" %>
<%@ import Namespace="System.Drawing.Drawing2D" %>
<script language="C#" runat="server">
void Page_Load(Object sender, EventArgs e) {
string imageLocation;
bool forceaspect = true;
int newHeight;
int newWidth;
int reqHeight = 100;
int reqWidth = 100;
int origHeight;
int origWidth;
imageLocation = Request.QueryString["Image"];
if (Request.QueryString["Height"] != null){
reqHeight = Convert.ToInt32(Request.QueryString["Height"]);
}
if (Request.QueryString["ForceAspect"] != null){
forceaspect = Convert.ToBoolean(Request.QueryString["ForceAspect"]);
}
if(Request.QueryString["Width"] != null){
reqWidth = Convert.ToInt32(Request.QueryString["Width"]);
}
if (Request.QueryString["ForceAspect"] == "true"){
forceaspect = true;
}
System.Drawing.Bitmap origBitmap = new System.Drawing.Bitmap(Server.MapPath(imageLocation));
origHeight = origBitmap.Height;
origWidth = origBitmap.Width;
if (forceaspect){
//Force Aspect Change
newHeight = reqHeight;
newWidth = reqWidth;
}
else if (origBitmap.Width >= origBitmap.Height){
//Portrait
newWidth = reqWidth;
newHeight = (int)(((double)origBitmap.Height / (double)origBitmap.Width) * reqWidth);
}
else{
//Landscape
newWidth = reqWidth;
newHeight = (int)(((double)origBitmap.Height / (double)origBitmap.Width) * reqWidth);
}
origBitmap.Dispose();
ResizeFile(imageLocation, newWidth, newHeight, "", 95);
}
private void Resize(Stream imgStr, int width, int height, string FileName, int compression) {
//creo il bitmap dallo stream
System.Drawing.Image bmpStream=System.Drawing.Image.FromStream(imgStr);
//creo un nuovo bitmap
Bitmap img;
Graphics oGraphic = Graphics.FromImage(bmpStream);
oGraphic.CompositingQuality = CompositingQuality.HighQuality;
//oGraphic.SmoothingMode = SmoothingMode.HighQuality;
oGraphic.InterpolationMode = InterpolationMode.HighQualityBicubic;
oGraphic.PixelOffsetMode = PixelOffsetMode.HighQuality;
oGraphic.SmoothingMode = SmoothingMode.AntiAlias;
//se indicato lo ridimensiono
if (width == 0 || height == 0) img=new Bitmap(bmpStream);
else img=new Bitmap(bmpStream,new Size(width,height));
ImageCodecInfo jpegCodecInfo;
System.Drawing.Imaging.Encoder encoder;
EncoderParameter encoderParameter;
EncoderParameters encoderParameters;
jpegCodecInfo = GetEncoderInfo("image/jpeg");
encoder = System.Drawing.Imaging.Encoder.Quality;
encoderParameters = new EncoderParameters(1);
encoderParameter = new EncoderParameter(encoder, compression);
encoderParameters.Param[0] = encoderParameter;
if (FileName == "") {
img.Save(FileName, jpegCodecInfo, encoderParameters);
} else {
Response.ContentType = "image/jpeg";
img.Save(Response.OutputStream, jpegCodecInfo, encoderParameters);
}
img.Dispose();
img = null;
}
private void ResizeFile(string nomefile,int width, int height, string nuovonome, int compression) {
//carico un'immagine in uno stream
try {
FileStream file=new FileStream(Server.MapPath(nomefile),FileMode.Open);
Resize(file,width,height,Server.MapPath(nuovonome),compression);
file.Close();
} catch (System.IO.FileNotFoundException ex) {
Response.Write("l'immagine non esiste");
}
}
ImageCodecInfo GetEncoderInfo(string mimeType) {
ImageCodecInfo[] encoders = ImageCodecInfo.GetImageEncoders();
for (int j = 0; j< encoders.Length; j++) {
if (encoders[j].MimeType == mimeType) {
return encoders[j];
}
}
return null;
}
</script>

Rispondi quotando