我已经将图像文件读入ByteArray,但我怎么能把它写回来.我的意思是将ByteArray保存到文件系统中的映像文件中.PNG格式首选.
我从PNG文件到ByteArray的代码:
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), mUri);
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();
Run Code Online (Sandbox Code Playgroud)
我知道有一些类似的问题,但我找不到这个问题的确切解决方案.谢谢!!!
我从库函数中获取rawData了类型的原始相机数据byte[],格式为RGBA,大小为640x480,每像素4个字节.我需要将其转换为位图并在屏幕上的ImageView中显示.
我所做的是以下内容:
byte[] JPEGData = convertToJpeg(rawData, 640, 480, 80);
Bitmap bitmap = BitmapFactory.decodeByteArray(JPEGData , 0, JPEGData .length);
imageView.setImageBitmap(bitmap);
Run Code Online (Sandbox Code Playgroud)
其中convertToJpeg()功能是:
public static byte[] convertToJpeg(byte[] buffer, int w, int h, int quality) {
YuvImage yuv_image = new YuvImage(buffer, ImageFormat.NV21, w, h, null);
Rect rect = new Rect(0, 0, w, h);
ByteArrayOutputStream output_stream = new ByteArrayOutputStream();
yuv_image.compressToJpeg(rect, quality, output_stream);
Bitmap sourceBmp = BitmapFactory.decodeByteArray(output_stream.toByteArray(), 0, output_stream.size());
Bitmap destBmp = Bitmap.createScaledBitmap(sourceBmp, (int) (w * 0.75), (int) (h * 0.75), …Run Code Online (Sandbox Code Playgroud) 今天我的应用程序崩溃,内存不足错误.
android.graphics.BitmapFactory.nativeDecodeAsset中的java.lang.OutOfMemoryError
我只使用Bitmap Factory为我的操作栏制作了一个背景
代码:
BitmapDrawable background = new BitmapDrawable (BitmapFactory.decodeResource(getResources(), R.drawable.actionbar));
background.setTileModeX(android.graphics.Shader.TileMode.REPEAT);
actionbar.setBackgroundDrawable(background);
Run Code Online (Sandbox Code Playgroud)
活动开始时不会发生此错误,它会在更改活动后发生.
有人可以告诉我如何解决这个问题
编辑编辑
以下是开发人员控制台中的错误消息:
java.lang.IllegalStateException: Could not execute method of the activity
at android.view.View$1.onClick(View.java:3838)
at android.view.View.performClick(View.java:4475)
at android.view.View$PerformClick.run(View.java:18786)
at android.os.Handler.handleCallback(Handler.java:730)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5419)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1187)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at android.view.View$1.onClick(View.java:3833)
... 11 more
Caused by: java.lang.OutOfMemoryError
at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:596)
at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:444)
at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:832)
at android.content.res.Resources.loadDrawable(Resources.java:2988)
at …Run Code Online (Sandbox Code Playgroud) 我想从BMP文件中读取所有像素的RGB值.我有c ++代码,看起来像:
#include <iostream>
#include <fstream>
using namespace std;
int main () {
FILE *streamIn;
streamIn = fopen("./Untitled.bmp", "r");
if (streamIn == (FILE *)0) {
printf("File opening error ocurred. Exiting program.\n");
return 0;
}
unsigned char info[54];
fread(info, sizeof(unsigned char), 54, streamIn);
int width = *(int*)&info[18];
int height = *(int*)&info[22];
int image[width*height][3];
int i = 0;
for(i=0;i<width*height;i++) {
image[i][2] = getc(streamIn);
image[i][1] = getc(streamIn);
image[i][0] = getc(streamIn);
printf("pixel %d : [%d,%d,%d]\n",i+1,image[i][0],image[i][1],image[i][2]);
}
fclose(streamIn);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
和这样的图像(网格重叠):

这是6x12像素的文件,有两种颜色 - 黑色和白色. …
我是mapforge的新手,想要显示我的自定义标记(从sdcard读取)并在mapforge上显示离线map.problem我面临的是不知道如何将我的android.graphics.Bitmap obj转换为org.mapsforge.core.graphics .Bitmap obj
Bitmap userImg = TrafficBeatHelper.getUserImg(context, userId); // get android.graphics.Bitmap file from sdcard
LatLong userLatLong = TrafficBeatHelper.getLatLong(cache.getSharedPrefValue(SharedPrefContstant.USER_CURRENT_LATITUDE),cache.getSharedPrefValue(SharedPrefContstant.USER_CURRENT_LONGITUDE)); // get user location
// Marker userImgMarker = new Marker(userLatLong, userImg, 0, 0);
Run Code Online (Sandbox Code Playgroud)
任何人都有任何其他选择,请提前分享txs.
我在我的应用程序中使用滑动库来显示位图(来自资产和来自url).它运作良好,但我得到了回忆问题因为我在每个活动中显示了很多图像.我看到我可以使用BitmapPool中的clearMemory(),但我不知道如何调用它.
有人知道怎么称呼它吗?
谢谢
在使用Android Studio的AndEngine创建游戏时,我将我的资源文件夹放在项目的根级别.我还在它下面创建了一个名为gfx的文件夹,并将我的splash.png放在那里.
当我调用启动画面时:
public void loadSplashScreen()
{
BitmapTextureAtlasTextureRegionFactory.setAssetBasePath("gfx/");
splashTextureAtlas = new BitmapTextureAtlas(activity.getTextureManager(), 390, 534, TextureOptions.BILINEAR);
splash_region = BitmapTextureAtlasTextureRegionFactory.createFromAsset(splashTextureAtlas, activity, "splash.png", 0, 0);
splashTextureAtlas.load();
}
Run Code Online (Sandbox Code Playgroud)
这是产生的错误
我把东西放在错误的地方吗?资产应该在哪里?
E/AndEngine? Failed loading Bitmap in AssetBitmapTextureAtlasSource. AssetPath: gfx/splash.png
java.io.FileNotFoundException: gfx/splash.png
at android.content.res.AssetManager.openAsset(Native Method)
at android.content.res.AssetManager.open(AssetManager.java:316)
at android.content.res.AssetManager.open(AssetManager.java:290)
at org.andengine.opengl.texture.atlas.bitmap.source.AssetBitmapTextureAtlasSource.create(AssetBitmapTextureAtlasSource.java:52)
at org.andengine.opengl.texture.atlas.bitmap.source.AssetBitmapTextureAtlasSource.create(AssetBitmapTextureAtlasSource.java:43)
at org.andengine.opengl.texture.atlas.bitmap.BitmapTextureAtlasTextureRegionFactory.createFromAsset(BitmapTextureAtlasTextureRegionFactory.java:86)
at org.andengine.opengl.texture.atlas.bitmap.BitmapTextureAtlasTextureRegionFactory.createFromAsset(BitmapTextureAtlasTextureRegionFactory.java:82)
at com.waylonhuang.game.ResourcesManager.loadSplashScreen(ResourcesManager.java:68)
at com.waylonhuang.game.SceneManager.createSplashScene(SceneManager.java:93)
at com.waylonhuang.game.GameActivity.onCreateScene(GameActivity.java:62)
at org.andengine.ui.activity.BaseGameActivity$3.onCreateResourcesFinished(BaseGameActivity.java:171)
at com.waylonhuang.game.GameActivity.onCreateResources(GameActivity.java:45)
at org.andengine.ui.activity.BaseGameActivity.onCreateGame(BaseGameActivity.java:183)
at org.andengine.ui.activity.BaseGameActivity.onSurfaceCreated(BaseGameActivity.java:112)
at org.andengine.opengl.view.EngineRenderer.onSurfaceCreated(EngineRenderer.java:80)
at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1501)
at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1240)
01-17 16:48:21.329 30718-30749/com.waylonhuang.game E/AndEngine? Failed loading Bitmap in AssetBitmapTextureAtlasSource. …Run Code Online (Sandbox Code Playgroud) 在某处我找到了将BitMap转换为字符串的代码:
function Base64FromBitmap(Bitmap: TBitmap): string;
var
Input: TBytesStream;
Output: TStringStream;
begin
Input := TBytesStream.Create;
try
Bitmap.SaveToStream(Input);
Input.Position := 0;
Output := TStringStream.Create('', TEncoding.ASCII);
try
Soap.EncdDecd.EncodeStream(Input, Output);
Result := Output.DataString;
finally
Output.Free;
end;
finally
Input.Free;
end;
end;
Run Code Online (Sandbox Code Playgroud)
但是,这会给回一块包裹的线条.是否可以获得一条没有换行符的单行?
在我的Costum相机应用中,我需要将位图和Uri从一项活动转移到另一项活动。由于某种原因,我在大多数手机上都收到了失败的绑定交易错误(我在较新的手机上收到了错误,但在Nexus4和Galaxy3上却没有收到)。即使我仅尝试通过意图传输位图,我也会遇到相同的错误(我也尝试仅传输Uri并收到错误)。从我在线阅读的内容来看,该错误来自内存问题,但我不知道如何解决。我将不胜感激。
我的第一个活动:
...
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
if (requestCode == SELECT_PICTURE) {
tv.setVisibility(View.INVISIBLE);
btn.setVisibility(View.INVISIBLE);
selectedImageUri = data.getData();
selectedImagePath = getPath(selectedImageUri);
System.out.println("Image Path : " + selectedImagePath);
img.setImageURI(selectedImageUri);
ok.setVisibility(View.VISIBLE);
}
}
}
public String getPath(Uri uri) {
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = managedQuery(uri, projection, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(v.getId()==btn.getId()) …Run Code Online (Sandbox Code Playgroud) 我使用以下方法从URL检索位图并将其传递给imageview,但imageview没有更新.
public static Bitmap LoadImageFromWebOperations(String url) {
Bitmap bitmap;
try {
InputStream is = new URL(url).openStream();
bitmap = BitmapFactory.decodeStream(is);
return bitmap;
} catch (Exception e) {
return null;
}
Run Code Online (Sandbox Code Playgroud)
电话 -
mov1_poster.setImageBitmap(VPmovies.LoadImageFromWebOperations(mov_details[0][7]));
//doesn't work
Toast.makeText(this,"url is \n"+mov_details[0][7],Toast.LENGTH_LONG).show();
// shows the url of the image successfully (just to check the url is not null)
Run Code Online (Sandbox Code Playgroud)
我有什么问题吗?请帮忙.