Remote convert to png preload
This commit is contained in:
parent
087b09fe68
commit
7a8e70e693
|
@ -96,7 +96,6 @@ class MainActivity : FlutterActivity() {
|
|||
// 获取可以迁移数据地址
|
||||
"androidGetExtendDirs" -> androidGetExtendDirs()
|
||||
"androidSecureFlag" -> androidSecureFlag(call.argument("flag")!!)
|
||||
"convertToPNG" -> convertToPNG(call.argument("path")!!)
|
||||
else -> {
|
||||
notImplementedToken
|
||||
}
|
||||
|
@ -347,28 +346,6 @@ class MainActivity : FlutterActivity() {
|
|||
}
|
||||
}
|
||||
|
||||
private fun convertToPNG(path: String): ByteArray {
|
||||
BitmapFactory.decodeFile(path)?.let { bitmap ->
|
||||
val maxWidth =
|
||||
when {
|
||||
Build.VERSION.SDK_INT >= Build.VERSION_CODES.R -> windowManager.currentWindowMetrics.bounds.width()
|
||||
Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1 -> {
|
||||
val displayMetrics = DisplayMetrics()
|
||||
windowManager.defaultDisplay.getRealMetrics(displayMetrics)
|
||||
displayMetrics.widthPixels
|
||||
}
|
||||
else -> throw Exception("not support")
|
||||
}
|
||||
if (bitmap.width > maxWidth) {
|
||||
val newHeight = maxWidth * bitmap.height / bitmap.width
|
||||
val newImage = Bitmap.createScaledBitmap(bitmap, maxWidth, newHeight, true)
|
||||
return compressBitMap(newImage)
|
||||
}
|
||||
return compressBitMap(bitmap)
|
||||
}
|
||||
throw Exception("error pic")
|
||||
}
|
||||
|
||||
private fun compressBitMap(bitmap: Bitmap): ByteArray {
|
||||
val bos = ByteArrayOutputStream()
|
||||
bos.use { bos ->
|
||||
|
|
|
@ -684,11 +684,6 @@ class Method {
|
|||
return _flatInvoke("saveDownloadThreadCount", "$value");
|
||||
}
|
||||
|
||||
/// 转化为PNG
|
||||
Future<Uint8List> convertToPNG(String path) async {
|
||||
return await _channel.invokeMethod("convertToPNG", {"path": path});
|
||||
}
|
||||
|
||||
/// HTTP-GET-STRING
|
||||
Future<String> defaultHttpClientGet(String url) async {
|
||||
return await _flatInvoke("defaultHttpClientGet", url);
|
||||
|
|
|
@ -1,48 +0,0 @@
|
|||
import 'dart:io';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import '../Common.dart';
|
||||
import '../Method.dart';
|
||||
|
||||
const _propertyName = "convertToPNG";
|
||||
var _convertToPNG = false;
|
||||
|
||||
Future initConvertToPNG() async {
|
||||
if (Platform.isAndroid) {
|
||||
_convertToPNG =
|
||||
(await method.loadProperty(_propertyName, "false")) == "true";
|
||||
}
|
||||
}
|
||||
|
||||
bool convertToPNG() {
|
||||
return _convertToPNG;
|
||||
}
|
||||
|
||||
Future<void> _chooseConvertToPNGSetting(BuildContext context) async {
|
||||
String? result = await chooseListDialog<String>(context, "超大图片缩放", ["是", "否"],
|
||||
tips: "会增加耗电\n可以解决部分漫画崩溃的问题");
|
||||
if (result != null) {
|
||||
var target = result == "是";
|
||||
await method.saveProperty(_propertyName, "$target");
|
||||
_convertToPNG = target;
|
||||
}
|
||||
}
|
||||
|
||||
Widget convertToPNGSetting() {
|
||||
if (Platform.isAndroid) {
|
||||
return StatefulBuilder(
|
||||
builder: (BuildContext context, void Function(void Function()) setState) {
|
||||
return ListTile(
|
||||
title: const Text("读取到超大图片时进行缩放(防止崩溃)"),
|
||||
subtitle: Text(_convertToPNG ? "是" : "否"),
|
||||
onTap: () async {
|
||||
await _chooseConvertToPNGSetting(context);
|
||||
setState(() {});
|
||||
},
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
return Container();
|
||||
}
|
|
@ -6,7 +6,6 @@ import 'package:pikapika/basic/config/AutoClean.dart';
|
|||
import 'package:pikapika/basic/config/AutoFullScreen.dart';
|
||||
import 'package:pikapika/basic/config/ChooserRoot.dart';
|
||||
import 'package:pikapika/basic/config/ContentFailedReloadAction.dart';
|
||||
import 'package:pikapika/basic/config/ConvertToPNG.dart';
|
||||
import 'package:pikapika/basic/config/DownloadAndExportPath.dart';
|
||||
import 'package:pikapika/basic/config/DownloadThreadCount.dart';
|
||||
import 'package:pikapika/basic/config/FullScreenAction.dart';
|
||||
|
@ -80,7 +79,6 @@ class _InitScreenState extends State<InitScreen> {
|
|||
await initDownloadAndExportPath();
|
||||
await initAndroidSecureFlag();
|
||||
await initDownloadThreadCount();
|
||||
await initConvertToPNG();
|
||||
await initNoAnimation();
|
||||
await initExportRename();
|
||||
await initVersion();
|
||||
|
|
|
@ -8,7 +8,6 @@ import 'package:pikapika/basic/config/AutoClean.dart';
|
|||
import 'package:pikapika/basic/config/AutoFullScreen.dart';
|
||||
import 'package:pikapika/basic/config/ChooserRoot.dart';
|
||||
import 'package:pikapika/basic/config/ContentFailedReloadAction.dart';
|
||||
import 'package:pikapika/basic/config/ConvertToPNG.dart';
|
||||
import 'package:pikapika/basic/config/DownloadAndExportPath.dart';
|
||||
import 'package:pikapika/basic/config/DownloadThreadCount.dart';
|
||||
import 'package:pikapika/basic/config/ExportRename.dart';
|
||||
|
@ -66,7 +65,6 @@ class SettingsScreen extends StatelessWidget {
|
|||
const NetworkSetting(),
|
||||
const Divider(),
|
||||
qualitySetting(),
|
||||
convertToPNGSetting(),
|
||||
readerTypeSetting(),
|
||||
readerDirectionSetting(),
|
||||
readerSliderPositionSetting(),
|
||||
|
|
|
@ -6,20 +6,12 @@ import 'package:pikapika/basic/Common.dart';
|
|||
import 'package:pikapika/basic/Cross.dart';
|
||||
import 'package:pikapika/basic/Method.dart';
|
||||
import 'package:flutter_svg/svg.dart';
|
||||
import 'package:pikapika/basic/config/ConvertToPNG.dart';
|
||||
import 'package:pikapika/basic/config/ImageAddress.dart';
|
||||
import 'dart:io';
|
||||
import 'dart:ui' as ui show Codec;
|
||||
|
||||
import '../FilePhotoViewScreen.dart';
|
||||
|
||||
Future<Uint8List> _loadImageFile(String path) {
|
||||
if (convertToPNG()) {
|
||||
return method.convertToPNG(path);
|
||||
}
|
||||
return File(path).readAsBytes();
|
||||
}
|
||||
|
||||
// 从本地加载图片
|
||||
class ResourceFileImageProvider
|
||||
extends ImageProvider<ResourceFileImageProvider> {
|
||||
|
@ -46,7 +38,7 @@ class ResourceFileImageProvider
|
|||
Future<ui.Codec> _loadAsync(ResourceFileImageProvider key) async {
|
||||
assert(key == this);
|
||||
return PaintingBinding.instance!
|
||||
.instantiateImageCodec(await _loadImageFile(path));
|
||||
.instantiateImageCodec(await File(path).readAsBytes());
|
||||
}
|
||||
|
||||
@override
|
||||
|
|
Loading…
Reference in New Issue