Я хочу создать растровые изображения с уменьшенным масштабом (оригинальное растровое изображение, загруженное из актива) с высоким качеством, сравнимым с качеством растровых изображений, масштабированных с помощью профессионального программного обеспечения, такого как Paint.net (в Paint.NET алгоритм масштабирования выбирается в поле под названием «Интерполяция». самая высокая настройка использует суперсэмплинг)?
Я понимаю, как реализовать суперсэмплинг для сглаживания. В целях сглаживания исходное изображение визуализируется в более высоком разрешении, а затем подвергается субдискретизации. Например, чтобы получить целевое изображение 100x100, вы должны отрендерить сцену до 200x200, а затем уменьшить ее разрешение с помощью сетки 2x2.
Но как алгоритм может справиться с понижением разрешения, скажем, с 400x400 до 175x175 для целей масштабирования. Сетка в этом случае должна быть ~ 2.285x2.285. Итак, как можно реализовать суперсэмплинг для целей масштабирования?
Спасибо
РЕДАКТИРОВАТЬ: мой текущий алгоритм выглядит так:
private Bitmap downscale(Bitmap src, int targetWidth, int targetHeight){
Bitmap target = Bitmap.createBitmap(targetWidth, targetHeight, Config.ARGB_8888);
float w = src.getWidth()/(float)targetWidth;
float s = src.getHeight()/(float)targetHeight;
int color = 0;
int g = 0;
for(int i=0;i<target.getWidth();++i){
for(int j=0;j<target.getHeight();++j){
color = 0;
g = 0;
for(float k =i*w;k<roundUp((i+1)*w);++k){
for(float l=j*w;l<roundUp((j+1)*s);++l){
++g;
color+=src.getPixel((int)k, (int)l);
}
}
target.setPixel(i, j, color/g);
}
}
return target;
}
На изображении показано то же растровое изображение 100x100, масштабированное до 54x54. Левый масштабирован Paint.Net, а правый — моим алгоритмом. Выглядит не очень хорошо... Как я могу улучшить свой код?