问题描述
我正在使用Camera2 API,并且正在尝试检索最大的可用图像尺寸。我想使用Collections.max。我试图用Java编写此代码,并且效果很好。
JAVA Ex-
Cameracharacteristics characteristics
= manager.getCameracharacteristics(cameraId);
// We don't use a front facing camera in this sample.
Integer facing = characteristics.get(Cameracharacteristics.LENS_FACING);
if (facing != null && facing == Cameracharacteristics.LENS_FACING_FRONT) {
continue;
}
StreamConfigurationMap map = characteristics.get(
Cameracharacteristics.SCALER_STREAM_CONfigURATION_MAP);
if (map == null) {
continue;
}
// For still image captures,we use the largest available size.
Size largest = Collections.max(
Arrays.asList(map.getoutputSizes(ImageFormat.JPEG)),new CompareSizesByArea());
但是,等效于Kotlin的Collections.max
操作存在问题。
科特琳Ex-
val characteristics = manager.getCameracharacteristics(cameraId)
val map = characteristics.get(
Cameracharacteristics.SCALER_STREAM_CONfigURATION_MAP
) ?: continue
// for still image captures,we use the largest available size
val largest = Collections.max(
listof(map.getoutputSizes(ImageFormat.JPEG)),CompareSizesByArea()
)
以下任何替换项(((MutableCollection
!> .. Collection !>?),比较器 !>!)((MutableCollection .. Collection ?),Comparator !)可以应用于 (列表!>,CompareSizesByArea)
我不确定如何更正我的代码。我可以在其他实例中使用Collections.max,例如
val test = listof(1,2,3,4,1)
Collections.max(test)
问题在于输出尺寸图?
解决方法
如您在Java代码中所使用的,
Arrays.asList()
将数组转换为List
。所以你有一个List<Size>
。
listOf()
将创建传递给它的项目的列表。在这种情况下,您将一个项目传递给它,即数组。因此,您正在创建一个List<Array<Size>>
,其中只有一个对象,即大小数组。
在Kotlin中执行Arrays.asList()
的等效方法是简单地在数组上调用.asList()
:
val largest = Collections.max(
map.getOutputSizes(ImageFormat.JPEG).asList(),CompareSizesByArea()
)
但是,如果您要纯粹在Kotlin中进行此操作,则可以跳过Collections
函数,并更简单地执行此操作:
val largest = map.getOutputSizes(ImageFormat.JPEG).maxBy { it.width * it.height }