我正在开发一个需要捕获屏幕到位图进行传输的应用程序.我正在尝试使用新的Android 5.0 android.media.projection API来进行屏幕捕获.
此API的工作流程最终会调用
mediaProjection.createVirtualDisplay("Test Screen", WIDTH, HEIGHT, DPI,
DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR, surface, null, null);
Run Code Online (Sandbox Code Playgroud)
在我最初尝试捕获时,我从SurfaceView中获取了表面对象.这工作正常; 最终结果是在屏幕上绘制的显示器的微小副本(导致Droste效果)
我认为这个功能几近完成,但我发现 SurfaceViews(从代码的角度来看)是不可读的; 你不能从他们那里得到一个位图.
在寻找其他解决方案时,我遇到了这个与我的目标非常相似的问题,并且在该线程中建议使用ImageReader而不是SurfaceView来获取传递给createVirtualDisplay API调用的Surface.
但是,当我更改我的代码以使用ImageReader代替SurfaceView时,我得到运行时logcat错误(没有异常),并且永远不会调用ImageReader的回调函数.createVirtualDisplay调用还返回一个看似有效的VirtualDisplay对象.
这是logcat:
9230-9270/com.android.techrocket9.nanoid E/BufferQueueProducer? [unnamed-9230-0] dequeueBuffer: createGraphicBuffer failed
9230-9246/com.android.techrocket9.nanoid E/BufferQueueProducer? [unnamed-9230-0] dequeueBuffer: can't dequeue multiple buffers without setting the buffer count
9230-9246/com.android.techrocket9.nanoid E/BufferQueueProducer? [unnamed-9230-0] dequeueBuffer: can't dequeue multiple buffers without setting the buffer count
9230-9246/com.android.techrocket9.nanoid E/BufferQueueProducer? [unnamed-9230-0] dequeueBuffer: can't dequeue multiple buffers without setting the buffer count
9230-9246/com.android.techrocket9.nanoid E/BufferQueueProducer? …Run Code Online (Sandbox Code Playgroud) <?xml version="1.0" encoding="utf-8"?>
<bitmap
android:src="@drawable/ic_action_remove"
android:alpha="0.4"
xmlns:android="http://schemas.android.com/apk/res/android">
</bitmap>
Run Code Online (Sandbox Code Playgroud)
这段代码仅适用于android API 21(棒棒糖).
有没有办法在以前的版本中为drawables设置alpha?
我正在开发一款游戏
首先我的游戏将非常简单,所以我宁愿不使用库或opengl或canvas,我宁愿用简单的图像视图或普通视图来实现这一点,或者至少以最简单的方式实现.例如,使用android位图平铺模式:
public static void setBackground(Bitmap bmp, ViewGroup layout){
BitmapDrawable bitmapDrawable = new BitmapDrawable(bmp);
bitmapDrawable.setTileModeXY(Shader.TileMode.REPEAT, Shader.TileMode.REPEAT);
layout.setBackgroundDrawable(bitmapDrawable);
}
Run Code Online (Sandbox Code Playgroud)
我想开发一个简单的2D/3D混合太空飞船游戏.屏幕将是太空飞船驾驶舱的视野,你将移动宇宙飞船触摸我已经完成的操纵杆.所以背景将是一个宇宙背景,我的意思是一个巨大的黑色图像与星星,这个图像必须移动到所有方向,操纵杆模拟太空船正在改变它的方向,当你向右移动很多时,例如,背景图像必须从头开始模拟太空船仍在向右移动而没有任何限制
正如我所提到的,我现在有了操纵杆,我知道如何使用操纵杆移动图像视图,问题是我不知道如何正确地创建带有图块的无限图像视图,因为当我移动包含图块的图像时可以移动然后图像从屏幕上消失.
这是使用无限背景的图像示例:

我在图像表字段中有一个图像,我想在我的应用程序我的PHP页面使用该图像
$user = array();
$user["image"] = base64_encode($result["image"]);
// success
$response["success"] = 1;
// user node
$response["image_table"] = array();
array_push($response["image_table"], $user);
Run Code Online (Sandbox Code Playgroud)
当我在我的应用程序中使用该数组时,我使用此...
if (success == 1)
{
address = json.getJSONArray(TAG_IMAGE_TABLE);
for (int i = 0; i < address.length(); i++) {
JSONObject c = address.getJSONObject(i);
image = c.getString(TAG_IMAGE);
}
Run Code Online (Sandbox Code Playgroud)
它给我的结果如
json response: {"success":1,"image_table": [{"image":"iVBORw0KGgoAAA...................."
Run Code Online (Sandbox Code Playgroud)
当我在我的图像视图中使用此图像时,我会使用它
ImageView ivProperty = ((ImageView) myContentView.findViewById(R.id.image_property));
byte[] decodedString;
try {
decodedString = Base64.decode(image, Base64.URL_SAFE);
Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
ivProperty.setImageBitmap(decodedByte);
} catch (IOException e) {
// TODO …Run Code Online (Sandbox Code Playgroud) 流行游戏Words with Friends在游戏板上绘制字母拼贴作为单个实体 -
您可以在以下屏幕截图中看到应用于所有字母图块的黄色线性渐变,以及边缘上的浮雕效果:

在我的文字游戏中,我希望有类似的效果:

所以我创建了一个游戏板大小mBitmap,然后将所有图块绘制到其中,最后将位图绘制到我的自定义视图中 -
建立:
setLayerType(View.LAYER_TYPE_SOFTWARE, null);
// create yellow linear gradient
mGradStart = new Point(3 * mWidth / 4, mHeight / 3);
mGradEnd = new Point(mWidth / 4, 2 * mHeight / 3);
LinearGradient gradient = new LinearGradient(
mGradStart.x,
mGradStart.y,
mGradEnd.x,
mGradEnd.y,
new int[]{ 0xCCFFCC00, 0xCCFFCC99, 0xCCFFCC00 },
null,
TileMode.CLAMP);
// create the big bitmap holding all tiles
mBitmap = Bitmap.createBitmap(mWidth, mHeight, Bitmap.Config.ARGB_8888);
mCanvas = …Run Code Online (Sandbox Code Playgroud) 在构建我的第一个Android应用程序时,我注意到应用程序启动时内存使用率已接近20MB.我下载了Eclipse MAT并查看了内容,以便在内存中找到数百个(如果不是数千个)位图.其中很多都没有直接用在我的项目中(至少不是我所知道的那么多)
最大图像为9MB:https: //imagebin.ca/v/2eCK4JYLO2f2
其他更小:https: //imagebin.ca/v/2eCMmbFuIWsz
Android似乎已经竭尽全力通过使用zygote来减少内存...那么为什么内存中已经有这么多未使用的位图呢?
(基本项目是使用Android Studio的空白活动,片段由文本视图组成,简单地说"Hello World!")
我正在开发一个 Android 应用程序,它使用背景Service以编程方式捕获当前屏幕上任何内容的屏幕截图。我将屏幕截图作为Bitmap.
接下来,我成功地将OpenCV导入到我的 Android 项目中。
我现在需要做的是模糊该图像的一个子集,即不是整个图像本身,而是图像内的 [矩形] 区域或子区域。我有一组Rect对象,代表我需要在屏幕截图中模糊的矩形区域。
我一直在寻找有关在 Java 中使用 OpenCV 执行此操作的教程,但我还没有找到明确的答案。在Mat和Imgproc类是明显的利益的,而还有的Mat.submat()方法,但我一直无法找到能完成这一操作清晰,简单的教程。
我在谷歌上搜索了很多,我发现的例子都不是完整的。我需要在 Java 中在 Android 运行时中执行此操作。
我需要的是:
Bitmap>>>Mat>>>Imgproc>>>Rect>>>BitmapROI 模糊。
这里有任何经验丰富的 OpenCV 开发人员,你能指出我正确的方向吗?这是我唯一坚持的事情。
相关:
我想将我的位图保存到缓存目录.我用这个代码:
try {
File file_d = new File(dir+"screenshot.jpg");
@SuppressWarnings("unused")
boolean deleted = file_d.delete();
} catch (Exception e) {
// TODO: handle exception
}
imagePath = new File(dir+"screenshot.jpg");
FileOutputStream fos;
try {
fos = new FileOutputStream(imagePath);
bitmap.compress(CompressFormat.JPEG, 100, fos);
fos.flush();
fos.close();
} catch (FileNotFoundException e) {
Log.e("GREC", e.getMessage(), e);
} catch (IOException e) {
Log.e("GREC", e.getMessage(), e);
}
}
Run Code Online (Sandbox Code Playgroud)
它工作正常.但是,如果我想将不同的img保存到相同的路径,那么就会出现问题.我的意思是它被保存到相同的路径,但我看到它的旧图像,但当我点击图像,我可以看到我第二次保存的正确图像.
也许它来自缓存,但我不想看到旧图像,因为当我想与whatsapp旧图像共享该图像时,如果我发送图像似乎是正确的.
我想在whatsapp上分享已保存的图像,如下代码:
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(imagePath));
shareIntent.setType("image/jpeg");
startActivityForResult(Intent.createChooser(shareIntent, getResources().getText(R.string.title_share)),whtsapp_result);
Run Code Online (Sandbox Code Playgroud)
我该如何解决?
提前致谢.
android android-layout android-imageview android-file android-bitmap
在发送到服务器之前,是否可以使用滑翔来压缩从图库中选取或由相机捕获的图像。
换句话说,可以像这样压缩图像:
1) 使用 glide 读取 uri 并更改为位图。
2) 检查位图的大小。
3) 使用 Bitmap.creatScaledBitmap(....) 调整位图的大小。
4) 位图质量较低。
5)然后发送。
是否可以?
如果我已经按照旧方式这样做,我会得到什么好处:
1) 从文件中获取位图。
2)与上面相同的东西......
谢谢。
android ×10
android-bitmap ×10
bitmap ×2
android-file ×1
emboss ×1
gaussianblur ×1
java ×1
mysql ×1
nexus6 ×1
opencv ×1
pdf ×1
php ×1
porter-duff ×1
tile ×1