基础知识 标签

在Android中使用Netty-Socket互相发送图片和文字

  |   0 评论   |   0 浏览   |   夜雨飘零

在 Android 中使用 Netty-Socket 互相发送图片和文字,

首先是服务端,服务端的应用在 server 下,其中最重要的是 NettyServerUtil.java,这里包含了服务的启动和发送数据,这数据包括文字和图像。

这段代码是启动 Netty 服务的,其中非常重要的是 ch.pipeline().addLast(new ByteArrayEncoder());ch.pipeline().addLast(new ByteArrayDecoder());,因为我们要传输的都是基于 byte[] 的,同时还要 LineBasedFrameDecoder 设置最大包的长度。

Android使用CameraX实现相机快速实现对焦和放大缩小

  |   0 评论   |   0 浏览   |   夜雨飘零

Android 使用 CameraX 实现相机快速实现对焦和放大缩小,本教程介绍如何使用 CameraX 实现相机点击对焦和放大缩小,单击对焦指定位置,使用双指放大缩小图像。下面是页面代码,使用 PreviewView 预览相机图像,然后使用 FocusImageView 自定义 View 来显示对焦框。CameraXPreviewViewTouchListener.kt 点监听事件,用于监听屏幕的点击监听动作。

Android使用CameraX快速预览和拍照

  |   0 评论   |   0 浏览   |   夜雨飘零

CameraX 是谷歌提供的相机框架,这个框架非常强大,可以实现很方便点击对焦,放大缩小,保存优质的图像等等。最重要的是 androidx.camera.view.PreviewView 控件,这个可以实现预览图像,点击监听事件等操作都可以在这里完成。不过这里只介绍预览图像和拍照保存。startCamera() 方法可以实现预览操作,代码都有注释。CameraX 提供了 imageCapture.takePicture() 接口用于保存图像。

Android使用CameraKit快速使用相机

  |   0 评论   |   0 浏览   |   夜雨飘零

CameraKit 框架是一款极其简单的 Android 相机框架,代码量比使用原生的少很多。本章教程我们就来使用 CameraKit 搭建一个简单的相机,并实现点击保存图像。

Java 代码就简单很多了,其中要在 Activity 生命周期中也添加 CameraKitView 的什么周期。CameraKit 也提供了动态权限申请接口,使用 cameraKitView.onRequestPermissionsResult() 接口实现动态权限申请,这样就完成了相机预览功能。拍照保存也很简单,使用 cameraKitView.captureImage() 就可以保存图像到本地了。这也太简单了。

Python的命名元组是手工定义类的一个很好的选择

  |   0 评论   |   0 浏览   |   给我丶鼓励
# 使用namedtuple比手动定义类要短得多:
>>> from collections import namedtuple
>>> Car = namedtuple('Car', 'color mileage')

# 我们新的“Car”类按预期工作:
>>> my_car = Car('red', 3812.4)
>>> my_car.color
'red'
>>> my_car.mileage
3812.4

# 我们得到一个不错的字符串repr:
>>> my_car
Car(color='red' , mileage=3812.4)

# 和元组一样,namedtuple也是不可变的:
>>> my_car.color = 'blue'
AttributeError: "can't set attribute"

您可以使用“json.dumps()”来漂亮地打印Python字典

  |   0 评论   |   0 浏览   |   给我丶鼓励
# 对于dicts的标准字符串repr很难阅读:
>>> my_mapping = {'a': 23, 'b': 42, 'c': 0xc0ffee}
>>> my_mapping
{'b': 42, 'c': 12648430. 'a': 23}  # �0�6

# “json”模块可以做得更好:
>>> import json
>>> print(json.dumps(my_mapping, indent=4, sort_keys=True))
{
    "a": 23,
    "b": 42,
    "c": 12648430
}

# 注意,这只适用于包含基本类型的字典(检查“pprint”模块):
>>> json.dumps({all: 'yup'})
TypeError: keys must be a string

使用“timeit”模块测量一小段Python代码的执行时间

  |   0 评论   |   0 浏览   |   给我丶鼓励
# “timeit”模块允许您度量一小段Python代码的执行时间

>>> import timeit
>>> timeit.timeit('"-".join(str(n) for n in range(100))',
                  number=10000)

0.3412662749997253

>>> timeit.timeit('"-".join([str(n) for n in range(100)])',
                  number=10000)

0.2996307989997149

>>> timeit.timeit('"-".join(map(str, range(100)))',
                  number=10000)

0.24581470699922647

dict可用于模拟switch/case语句

  |   0 评论   |   0 浏览   |   给我丶鼓励
# 因为Python拥有一流的函数,所以它们可以用来模拟switch/case语句

def dispatch_if(operator, x, y):
    if operator == 'add':
        return x + y
    elif operator == 'sub':
        return x - y
    elif operator == 'mul':
        return x * y
    elif operator == 'div':
        return x / y
    else:
        return None


def dispatch_dict(operator, x, y):
    return {
        'add': lambda: x + y,
        'sub': lambda: x - y,
        'mul': lambda: x * y,
        'div': lambda: x / y,
    }.get(operator, lambda: None)()


>>> dispatch_if('mul', 2, 8)
16

>>> dispatch_dict('mul', 2, 8)
16

>>> dispatch_if('unknown', 2, 8)
None

>>> dispatch_dict('unknown', 2, 8)
None