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;
}
この画像は、54x54 にスケーリングされた同じ 100x100 ビットマップを示しています。左は Paint.Net でスケーリングされ、右は私のアルゴリズムでスケーリングされています。見栄えがよくありません... どうすればコードを改善できますか?