我需要在允许用户放大和缩小的视图中显示一个非常大的图像(例如 8000x8000)。
我已经检查了几个用于检测用户触摸并据此转换图像的选项。例如:
以及其他使用手势/触摸检测器等的人。
问题是他们都不关心位图的大小和可能的崩溃,因为位图不适合内存。
所以我正在寻找的是如何像 Android 的 Gallery 那样实现它。放大图像时不会损失质量,当然也不会崩溃
有任何想法吗?根据答案的复杂性和质量,将获得最多 300 分的完整有效答案
我需要在允许用户放大和缩小的视图中显示一个非常大的图像(例如 8000x8000)。
我已经检查了几个用于检测用户触摸并据此转换图像的选项。例如:
以及其他使用手势/触摸检测器等的人。
问题是他们都不关心位图的大小和可能的崩溃,因为位图不适合内存。
所以我正在寻找的是如何像 Android 的 Gallery 那样实现它。放大图像时不会损失质量,当然也不会崩溃
有任何想法吗?根据答案的复杂性和质量,将获得最多 300 分的完整有效答案
尝试仅显示位图的缩放子集并尽可能少地解码。我管理了类似的事情。这些是对我帮助很大的代码片段:
要计算您需要的所有值(例如比例因子、像素数等),您可以使用 inJustDecodeBounds 来获取位图的大小,而无需分配任何内存。:
BitmapFactory.Options opt = new BitmapFactory.Options();
opt.inJustDecodeBounds = true;
BitmapFactory.decodeFile(path, opt);
int width = opt.outWidth;
int height = opt.outHeight;
要仅解码位图的子集,请使用以下命令:
Bitmap.createBitmap(
source,
xCoordinateOfFirstPixel,
yCoordinateOfFirstPixel,
xNumberOfPixels,
yNumberOfPixels
);
要创建缩放位图:
Bitmap.createScaledBitmap(
source,
dstWidth,
dstHeight,
filter
);
要绘制位图的子集:
Canvas.drawBitmap(
source,
new Rect(
subsetLeft,
subsetTop,
subsetRight,
subsetBottom
),
new Rect(0,0,dstWidth, dstHeight),
paint
);
编辑:我忘了提到这个用于创建缩放图像的片段。为了节省内存,这就是您想要的:
BitmapFactory.Options opt = new BitmapFactory.Options();
options.inSampleSize = 2;
Bitmap scaledBitmap = BitmapFactory.decodeFile(path, opt);
因为 inSampleSize 必须是一个整数,所以我使用 createScaledBitmap 来稍微调整位图。
http://www.anddev.org/large_image_scrolling_using_low_level_touch_events-t11182.html
可能吗?
网站目前已关闭,因此最终可能与您无关,但我认为我应该发布它。
还
" ZOOM CONTROL (Widget) 监听 OnTouch 事件来处理平移 "
最后:
https://github.com/MikeOrtiz/TouchImageView
据我所知,^^ 可能正是您正在寻找的 2.0+
失败了,一个webview并像这样加载文件。