积累日常生活的点滴,开发过程的心得。

html小窍门img标签绑定无效时显示默认图像

有时,img标签绑定的图像可能没有,onerror可以强制给它一个fallback的图像返回

  1. <img src="/cover/nocover.jpg" width="120" height="150" alt="纵横星际之暗黑风暴" onerror="this.src='/cover/nocover.jpg'">

Flutter 里面降级pub

默认ide中只有pub get , pub upgrade pub outdated命令
问题是一旦升级pub,发现无法编译通过的时候,想要降级就不行了
降级的命令是在pubspec.yaml文件所在目录下执行命令

flutter --no-color pub downgrade

不降级的话,你会发现无论你在pubspec.yaml中如何设定pub的版本,它总是会生成一个pubspec.lock文件,指向升级后的版本,这个避免大量升级pub版本后导致无法编译的问题

使用Neon做快速的Endian变换

通过opengl得到的RGBA格式跟Delphi的TBitmap格式不一样,所有的字节是逆序的,neon指令一个时钟周期可以并行处理16个字节的Endian变换.参考了https://github.com/zbjornson/node-bswap这里的代码.

  1.  
  2. static void libenc_ARGBToBGRA(JNIEnv *env, jobject thiz, jbyteArray frame, jint src_width,
  3. jint src_height) {
  4. jbyte *argb_frame = env->GetByteArrayElements(frame, NULL);
  5. uint8_t * argb=(uint8_t *) argb_frame;
  6.  
  7. for (int p=0; p<src_height*src_width*4; p+=16, argb+=16)
  8. {
  9. uint8x16_t v = vld1q_u8(argb);
  10. v = vrev32q_u8(v);
  11. vst1q_u8(argb, v);
  12. }

IOS下面如果文件夹中的文件名包含特殊字符Delphi无法取到

TDirectory.GetFiles方法用的是linux的函数,对特殊字符的文件会认为是目录导致无法取得列表

下面这个函数用NSFileManager绕过了这个问题

  1.  
  2.  
  3. function GetFiles(APath:string):TStringDynArray;
  4.  
  5. var
  6.  
  7. fm:NSFileManager;
  8.  
  9. files:NSArray;
  10.  
  11. I: Integer;
  12.  
  13. list:TStrings;
  14.  
  15. f:string;
  16.  
  17. isDir:boolean;
  18.  
  19. begin
  20.  
  21. fm := TNSFileManager.Wrap(TNSFileManager.OCClass.defaultManager);
  22.  
  23. files:=fm.contentsOfDirectoryAtPath(StrToNSStr(APath), nil);
  24.  
  25.  
  26.  
  27. list:=TStringList.Create;
  28.  
  29. try
  30.  
  31. for I := 0 to files.count-1 do
  32.  
  33. begin

编译SDL2 For Android

一定不要用Automake的configure,直接调用build-scripts/androidbuildlibs.sh就可以了,注意要升级到2.0.10以上,运行前要安装ndk和android sdk.

编译sdl_mixer2的时候,需要依赖sdl,附件是我修改过的android.mk

用下面的命令编译

ndk-build NDK_PROJECT_PATH=null NDK_LOG=1 APP_BUILD_SCRIPT=Android.mk APP_ABI="arm64-v8a" APP_PLATFORM=android-23 NDK_OUT=build/obj NDK_LIBS_OUT=build/lib

ndk-build在ndk的根目录下

追记:
必须使用我修改过的版本2.0.0,才发现很久以前改的,自己都忘了,主要是sdl的代码都是通过回调获取java class和env,修改后的代码直接find AudioTrack class.
要想使用2.0.10的opengles,可能需要大改

flutter的dio上传多个文件到spring boot的后端

注意dio上传多个文件时,字段名是写死的files[],一定要设为
这个才行

  1. @PostMapping(value = "/upload")
  2. public RestResponse upload(@RequestParam("book") String book,
  3. @RequestParam("author") String author,
  4. @RequestParam("userid") String userid,
  5. @RequestParam("loginid") String loginid,
  6. @RequestParam("files[]") MultipartFile[] files ) {

ExpansionTile嵌入ListView

之前在ExpansionTile中嵌入Listview会报错.修正方法很简单,设置shrinkWrap=true,参考

https://stackoverflow.com/questions/52214706/flutter-vertical-viewport-u...

tomcat添加war之外的静态文件路径的方法

https://www.moreofless.co.uk/static-content-web-pages-images-tomcat-outs...

因为服务器是跑在windows上的,用符号链接是不推荐的(allowlinking)

同步内容