.net - مقاس - كيفية تصغير حجم الصورة بالكيلو بايت




تغيير حجم الصورة في.Net مع أنتيالياسينغ (4)

المضادة للتعرج لا علاقة له مع الرسومات النقطية. انها تنطبق فقط على ناقلات الرسومات. من الواضح أن الصورة عبارة عن رسم نقطي.

تحتاج إلى إلقاء نظرة على إنتيربولاتيونمود.

لقد حصلت على بعض رمز C # الذي يغير حجم الصور التي أعتقد أنها نموذجية جدا:

Bitmap bmp = new Bitmap(image, new Size(width, height));
Graphics graphics = Graphics.FromImage(bmp);
graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
graphics.CompositingQuality = CompositingQuality.HighQuality;
graphics.SmoothingMode = SmoothingMode.AntiAlias;
graphics.DrawImage(bmp, width, height);

المشكلة هي أن الصور الناتجة مستعار بشكل واضح والتغييرات على خصائص إنتيربولاتيونمود و سموثينغمود يبدو أن لا فرق.

أي مؤشرات؟


قد تكون المشكلة مكان آخر. يمكنني استخدام رمز مماثل لتغيير حجم الصور وأنها تعمل موافق، ولكن أكبر الفرق هو أنه عند حفظ الصورة لديك لتحديد الجودة (جبيغ):

ImageCodecInfo[] codecs=ImageCodecInfo.GetImageEncoders();
ImageCodecInfo codec = null;
for (int i = 0; i<codecs.Length;i++)
{
  if(codecs[i].MimeType.Equals("image/jpeg"))
    codec = codecs[i];
}

EncoderParameters encoderParametersInstance = null;

if (codec!=null)
{
  Encoder encoderInstance=Encoder.Quality;
  encoderParametersInstance = new EncoderParameters(2);
  //100% quality, try different values, around 80-90 gives good results.
  EncoderParameter encoderParameterInstance=new EncoderParameter(encoderInstance, 100L);
  encoderParametersInstance.Param[0]=encoderParameterInstance;
  encoderInstance=Encoder.ColorDepth;
  encoderParameterInstance=new EncoderParameter(encoderInstance, 24L);
  encoderParametersInstance.Param[1]=encoderParameterInstance;
}

MemoryStream ms = new MemoryStream();
resizedImage.Save(ms, codec, encoderParametersInstance);

فإنه يتحول رمز كان مجرد خطأ. كان في الواقع تغيير حجم الصورة دون الاستيفاء في منشئ الصورة النقطية، ثم محاولة تغيير حجم هذا الإصدار بسلاسة إلى حجم كان بالفعل في. هنا هو رمز المعدل:

Bitmap bmp = new Bitmap(width, height);
Graphics graph = Graphics.FromImage(bmp);
graph.InterpolationMode = InterpolationMode.High;
graph.CompositingQuality = CompositingQuality.HighQuality;
graph.SmoothingMode = SmoothingMode.AntiAlias;
graph.DrawImage(image, new Rectangle(0, 0, width, height));

بقدر ما يذهب التنعيم، المعلمة الأكثر أهمية هو graph.InterpolationMode . graph.InterpolationMode .

شكر.








graphics