25

Lanczos(理想的には)または少なくともbicubic algを使用して画像のサイズを変更できる方法または外部ライブラリはありますか。アンドロイドの下で?(もちろん早い方が良いですが、品質が優先され、処理時間は二の次です)

私がこれまでに持っているものはすべてこれです:

Bitmap resized = Bitmap.createScaledBitmap(yourBitmap, newWidth, newHeight, true);

ただし、バイリニア フィルターを使用しており、出力品質はひどいものです。特に詳細を保持したい場合 (細い線や読みやすいテキストなど)。

ここで例として説明されているように、Java には多くの優れたライブラリがあります: Java - 品質を落とさずに画像のサイズを変更する

ただし、常に のような Java awt クラスに依存しているjava.awt.image.BufferedImageため、Android では使用できません。

メソッドのデフォルト(バイリニア)フィルタを変更する方法や、クラス(またはコメントの@Tronが指摘したように、生の表現)で動作するMorten NobelのlibのBitmap.createScaledBitmap()ようなライブラリを変更する方法はありますか?android.graphics.Bitmap

4

5 に答える 5

-1

画像のサイズ変更に使用したコードは次のとおりです。

Bitmap photo1 ;
private byte[] imageByteArray1 ;


BitmapFactory.Options opt1 = new BitmapFactory.Options();
opt1.inJustDecodeBounds=true;
BitmapFactory.decodeFile(imageUrl.get(imgCount).toString(),opt1);

// The new size we want to scale to
final int REQUIRED_SIZE=320;

// Find the correct scale value. It should be the power of 2.
int width_tmp=opt1.outWidth,height_tmp=opt1.outHeight;
int scale=2;
while(true){
    if(width_tmp>REQUIRED_SIZE||height_tmp>REQUIRED_SIZE)
        break;
    width_tmp/=2;
    height_tmp/=2;
    scale*=2;
}
// Decode with inSampleSize
BitmapFactory.Options o2=new BitmapFactory.Options();
o2.inSampleSize=scale;
o2.inJustDecodeBounds=false;
photo1=BitmapFactory.decodeFile(imageUrl.get(imgCount).toString(),o2);

ByteArrayOutputStream baos1=new ByteArrayOutputStream();
photo1.compress(Bitmap.CompressFormat.JPEG,60,baos1);
imageByteArray1=baos1.toByteArray();

それがあなたを助けることを願っています..

于 2016-07-02T06:31:55.453 に答える