Articles of 位图

如何像Facebook和WhatApp那样优化图像?

我想像whatsapp和facebook正在做的那样优化图像文件大小。 我在whatsapp上发送了5MB图像,并且接收到的图像大小为80KB。 接收的图像看起来与原始图像相同,但分辨率低于原始图像。 我在stackoverflow上尝试了几乎所有的android图像压缩源代码,但这对我不起作用。 然后我遇到了这个链接,以优化图像,这是很好的工作,但仍然没有得到像whatsapp的结果。 如何在不降低图像质量的情况下实现最大图像压缩,就像whatsapp一样? 使用源代码回答将非常有帮助。 提前致谢。

可以在Android 4及更高版本的URL上显示video缩略图吗?

以下两个在仿真器(2.3.3)上工作正常,但在真实设备(带有4.1.2的Nexus S )上没有显示缩略图的图像。 我也会尝试在Android 4 Emulator上运行它。 如果我为ImageView设置了默认的android:src ,那么它就不再显示了。 这让我觉得它被替换了,但ImageView是空的。 public class MainActivity extends Activity { ImageView img; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); img = (ImageView)findViewById(R.id.img_thumbnail); new MyAsync().execute(“http://commonsware.com/misc/test.mp4”); } //This version is still not working, but it’s more readable (edited: Selvin). public class MyAsync extends AsyncTask{ @Override protected Bitmap doInBackground(String… objectURL) { //return […]

Bitmap分配如何在Oreo上运行,以及如何调查它们的内存?

背景 在过去几年中,为了检查Android上的堆内存量以及使用量,您可以使用以下内容: @JvmStatic fun getHeapMemStats(context: Context): String { val runtime = Runtime.getRuntime() val maxMemInBytes = runtime.maxMemory() val availableMemInBytes = runtime.maxMemory() – (runtime.totalMemory() – runtime.freeMemory()) val usedMemInBytes = maxMemInBytes – availableMemInBytes val usedMemInPercentage = usedMemInBytes * 100 / maxMemInBytes return “used: ” + Formatter.formatShortFileSize(context, usedMemInBytes) + ” / ” + Formatter.formatShortFileSize(context, maxMemInBytes) + ” (” + […]

使用ObjectAnimator顺时针旋转ImageView

我正在尝试旋转图像,使其适合下方的另一个图像。 所以这就是我想要实现的目标: 这就是我能够实现的目标: 它基本上包含两个ImageView ,第一个包含地板上方的部分,第二个包含覆盖地板的瓷砖。 我的问题是我无法以顺时针方向为瓷砖图像设置animation,也无法围绕x轴旋转视图,使其适合包含地板上方部分的图像。 我正在使用ObjectAnimator来animation我的ImageView 。 以下是我的代码: public class VisualizerFragment extends Fragment { ImageView image; FlipImageView image_back; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { getActivity().setRequestedOrientation( ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); View view = inflater.inflate(R.layout.fragment_visualizer, container, false); image = (ImageView) view.findViewById(R.id.vs_image); image_back = (FlipImageView) view.findViewById(R.id.vs_image_back); Glide.with(getActivity()) .load(R.drawable.floor3) .centerCrop() .fitCenter() .listener(new RequestListener() { @Override public boolean […]

如何通过Canvas DrawBitmap绘制位图的一部分

我有一个 : FrameLayout(标有红色) 源ImageView(黑色) 使用OnTouchListener的对象(imageview)(橙色) 使用OnTouchListener通过对象 ,我想显示在imageview( 源图像视图 )上填充的位图的一部分。 所以这不是问题,我这样做: Bitmap bt = Bitmap.createBitmap(sourceBitmap,event.getX(),event.getY(),250,250); 其中 : SourceBitmap – 是添加到源ImageView的图像 event.getX() / event.getY()是一个coord,我开始绘制位图的一部分 250,250 – 它是部分位图(部分)的大小。 结果是: 因此,当我的对象(使用touchlistener)进入边界(我已经使橙色对象具有这种可能性,与Object.width()/ 2一起走出边界)时会出现问题。 所以在这种情况下: 我怎样才能达到这个结果: 部分的结果将是: 位图的一部分 第二部分是framelayout背景的颜色。 我现在尝试的是: public boolean onTouch(View view, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_MOVE: //i want to draw bigger portion then corrds int […]

字节分配内存不足(使用soap将Bitmap作为String到webservice)

我有一个bitmap ,所以我想上传一个webserivceas字符串,并想要检索字符串。 使用以下方法将位图转换为字符串am: ByteArrayOutputStream stream = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream); byte[] byteArray = stream.toByteArray(); strBase64 = Base64.encodeToString(byteArray, Base64.URL_SAFE); 以上String用作soapobject上传的属性。 但是在打印和上传时, Out of memory on a 11674900-byte allocation 。 如果我调试了问题,没有打印我得到 com.sun.jdi.InvocationException occurred invoking method. 关于soaprequest. 如何解决此问题upload image作为字符串upload image到webservice?

Android位图内存问题 – 错误:8294416字节分配时内存不足

我目前正在开发一个讲述故事的应用程序。 故事包含“场景”,其中包含通过ImageViews显示的多个JPEG和PNG文件。 我创建了ImageView并通过以下函数将其添加到布局中: private ImageView newImage(Show show) { ImageView iv = new ImageView(this); String filePath = comin.generateFilePath(show); Log.i(TAG, “newImage, filePath = ” + filePath + ” id = ” + show.id); WeakReference bmp = new WeakReference(scaleBitmap(filePath)); //added 4/1/13 //Bitmap bmp = scaleBitmap(filePath); Log.i(TAG, “newImage, width = ” + bmp.get().getWidth() + “, height = ” + […]

android.hardware.Camera $ EventHandler.handleMessage

我正在编写一个程序,我正在拍摄照片,然后想要将图片存储到SD卡中,最后尝试调整现有图像的大小(然后用旧图像重写)。 我的代码几乎可以在所有设备上正常工作,但仅在三星设备上遇到此问题。 当我捕捉图像时,我无法将图像存储到SD卡中 logcat的: 12-05 18:23:15.407: E/AndroidRuntime(2378): FATAL EXCEPTION: main 12-05 18:23:15.407: E/AndroidRuntime(2378): java.lang.NullPointerException 12-05 18:23:15.407: E/AndroidRuntime(2378): at android.graphics.Bitmap.createScaledBitmap(Bitmap.java:461) 12-05 18:23:15.407: E/AndroidRuntime(2378): at com.example.kdh.TakePhotoActivity$1.onPictureTaken(TakePhotoActivity.java:325) 12-05 18:23:15.407: E/AndroidRuntime(2378): at android.hardware.Camera$EventHandler.handleMessage(Camera.java:789) 12-05 18:23:15.407: E/AndroidRuntime(2378): at android.os.Handler.dispatchMessage(Handler.java:99) 12-05 18:23:15.407: E/AndroidRuntime(2378): at android.os.Looper.loop(Looper.java:137) 12-05 18:23:15.407: E/AndroidRuntime(2378): at android.app.ActivityThread.main(ActivityThread.java:4921) 12-05 18:23:15.407: E/AndroidRuntime(2378): at java.lang.reflect.Method.invokeNative(Native Method) 12-05 18:23:15.407: E/AndroidRuntime(2378): at java.lang.reflect.Method.invoke(Method.java:511) […]

Android:图像缓存策略和内存缓存大小

我正在实现一个图像缓存系统来缓存下载的图像。 我的策略基于两级缓存:内存级别和磁盘级别。 我的课程类似于droidfu项目中使用的课程 我下载的图像被放入一个hashmap中,Bitmap对象被包装在一个SoftRererence对象中。 此外,每个图像都永久保存到磁盘。 如果在Hashmap<String,SoftReference>找不到请求的图像Hashmap<String,SoftReference>它将在磁盘上搜索,重新加载,然后推回到hashmap中。 否则,图像将从网络下载。 由于我将图像存储到物理设备momery中,因此我添加了一个检查以保留设备空间并保持在占用空间的1M以下: private void checkCacheUsage() { long size = 0; final File[] fileList = new File(mCacheDirPath).listFiles(); Arrays.sort(fileList, new Comparator() { public int compare(File f1, File f2) { return Long.valueOf(f2.lastModified()).compareTo( f1.lastModified()); } }); for (File file : fileList) { size += file.length(); if (size > MAX_DISK_CACHE_SIZE) { file.delete(); Log.d(ImageCache.class.getSimpleName(), “checkCacheUsage: […]

如何将Bitmap转换为Base64字符串

我正在开发一个Android应用程序,它将Base64字符串的图像上传到Web服务器。 因此,我使用以下代码将位图转换为Base64字符串。 public String getEncoded64ImageStringFromBitmap(Bitmap bitmap) { ByteArrayOutputStream stream = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream); byte[] byteFormat = stream.toByteArray(); String imgString = Base64.encodeToString(byteFormat, Base64.NO_WRAP); return imgString; } 例如,我需要转换此图像 。 在转换之后,我没有像我预期的那样获得Base64字符串。 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 它应该是真正的Base64字符串(我用这个网站转换) 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 我的转换有什么问题? 谢谢 !