public class MainActivity extends Activity {
ImageButton ib;
private static Bitmap Image = null;
private static final int GALLERY = 1;
private static Bitmap rotateImage = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ib = (ImageButton)findViewById(R.id.profile_pic);
ib.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
ib.setImageBitmap(null);
if (Image != null)
Image.recycle();
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select Picture"), GALLERY);
}
});
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == GALLERY && resultCode != 0) {
Uri mImageUri = data.getData();
try {
Image = Media.getBitmap(this.getContentResolver(), mImageUri);
if (getOrientation(getApplicationContext(), mImageUri) != 0) {
Matrix matrix = new Matrix();
matrix.postRotate(getOrientation(getApplicationContext(), mImageUri));
if (rotateImage != null)
rotateImage.recycle();
rotateImage = Bitmap.createBitmap(Image, 0, 0, Image.getWidth(), Image.getHeight(), matrix,
true);
ib.setImageBitmap(rotateImage);
} else
ib.setImageBitmap(Image);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static int getOrientation(Context context, Uri photoUri) {
/* it's on the external media. */
Cursor cursor = context.getContentResolver().query(photoUri,
new String[] { MediaStore.Images.ImageColumns.ORIENTATION }, null, null, null);
if (cursor.getCount() != 1) {
return -1;
}
cursor.moveToFirst();
return cursor.getInt(0);
}
}
的手册页有一节描述gcc
选项的位置:
在您编写此选项的命令中,它会有所不同;链接器搜索并处理库和对象 文件按指定顺序排列。因此,
-l
在文件foo.o -lz bar.o
之后但z
之前搜索库foo.o
。如果bar.o
是指bar.o
中的函数,可能无法加载这些函数。
问题是:
如果链接器搜索&按顺序处理文件列表,然后命令不应该在任何源代码和&之前指定z
选项。目标文件,而不是它们之后,以便库可以用于所有目标文件。
答案 0 :(得分:1)
链接器只是按照它们在命令行中显示的顺序解析外部引用。
以您的引用为例,foo.o -lz bar.o
:如果foo.o
使用z
库中的函数,则在链接器加载z
库时会解析这些函数。但是它并没有真正缓存这些条目,一旦使用z
库解析了外部引用,链接器就会忘记它们。现在当bar.o
出现并尝试使用z
库中的函数时,这些函数将无法解析,因为链接器不会再次读取z
库。