如何在android中创建包含drawable图像的新文件?
我需要从绘图目录中选择一个图像。 我的代码是:如何在android中创建包含drawable图像的新文件?,android,image-viewer,create-view,Android,Image Viewer,Create View,我需要从绘图目录中选择一个图像。 我的代码是: private void CreateViewForIndex(View rootView, int index) { // Instantiate GPUImageView object ImageView mGPUImageView = (ImageView)rootView.findViewById(R.id.image); // Set an image from file inside G
private void CreateViewForIndex(View rootView, int index) {
// Instantiate GPUImageView object
ImageView mGPUImageView = (ImageView)rootView.findViewById(R.id.image);
// Set an image from file inside GPUImageView object
File imageFile = new File("/MainActivity/res/drawable-hdpi/russia.jpeg");
mImageView.setImage(imageFile);
// Apply filter
mImageView.setFilter(returnFilterForIndex(index));
}
其中rootView是视图。我需要从以下目录中的图像创建一个新的
文件
对象:/MainActivity/res/drawable hdpi/rusia.jpeg
。问题是,我无法获得上一个图像文件的正确目录,因此jpeg永远不会显示。您可以使用以下代码从可绘制资源创建文件,而无需在该过程中进行任何额外的编码和解码。在这个代码中,文件被保存到应用程序私有缓存中,但是可以很容易地修改它以适应保存到任何文件
public File createFileFromResource(int resId, String fileName)
{
File f;
try
{
f = new File(getCacheDir() + File.separator + fileName);
InputStream is = getResources().openRawResource(resId);
OutputStream out = new FileOutputStream(f);
int bytesRead;
byte[] buffer = new byte[1024];
while((bytesRead = is.read(buffer)) > 0)
{
out.write(buffer, 0, bytesRead);
}
out.close();
is.close();
}
catch (IOException ex)
{
f = null;
}
return f;
}
您可以像这样使用上述方法:
private void CreateViewForIndex(View rootView, int index)
{
// Instantiate GPUImageView object
GPUImageView mGPUImageView = GPUImageView)rootView.findViewById(R.id.image);
// Set an image from file inside GPUImageView object
File imageFile = new File(R.drawable.russia, "russia.jpeg");
if (imageFile != null)
{
mImageView.setImage(imageFile);
// Apply filter
mImageView.setFilter(returnFilterForIndex(index));
}
}
当您不再使用创建的缓存文件时,最好将其删除,以最大限度地减少应用程序存储使用
imageFile.delete();
或者,您可以使用“退出”清除应用程序上的所有缓存文件
public void deleteInternalCacheFiles()
{
File[] cacheFiles = getCacheDir().listFiles();
for (File file : cacheFiles)
{
file.delete();
}
}
但是,如果您只缓存少量文件和/或这些文件不占用太多内存,您可以安全地跳过该部分。使用mImageView.setImageResource(R.drawable.russia)Ty,但我使用的是GPUImageView库,那么我不能使用setImageResource,我可以使用setBackgroundResource,但我不想要这种方法。我该怎么办?你有解决办法吗?请帮帮我,我也想要一样的。