[英]Use pngquant lib (libimagequant) in Android NDK
我试图在OS X上使用NDK r10(64位)在Android项目中使用pngquant.org/lib中的png量化库。
我在编译库方面正在取得进展。 我现在遇到的问题是size_t类型无法解析。 我尝试包括以下文件夹:
LOCAL_C_INCLUDES := $(NDK_TOOLCHAIN)/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/lib/gcc/arm-linux-androideabi/4.9/include
但这无济于事。
我会对包含pngquant的空白Android项目非常感兴趣。
任何帮助都非常感谢。
注意:很抱歉更改问题,但是我提出的原始问题中包含一些不正确的事实。
我没有足够的信息来直接解决您的特定问题,您是否要使用独立工具链?
在为Android进行构建时,由于您要针对多个架构,并且工具链有些复杂,因此最好使用NDK中的ndk-build脚本。
我在这里创建了一个项目,您可以将其集成到您的Android项目目录中: https : //github.com/android-native-libraries/pngquant-android
原始库使用的是configure脚本,但我没有重写这些库,而是改写了NDK Makefiles,以使用相同的cflag(openmp,sse ...)直接编译所有lib源代码。
Android.mk:
LOCAL_PATH := $(call my-dir)
SRC_PATH := pngquant/lib
include $(CLEAR_VARS)
LOCAL_MODULE := imagequant
LOCAL_SRC_FILES := \
$(SRC_PATH)/blur.c \
$(SRC_PATH)/libimagequant.c \
$(SRC_PATH)/mediancut.c \
$(SRC_PATH)/mempool.c \
$(SRC_PATH)/nearest.c \
$(SRC_PATH)/pam.c \
$(SRC_PATH)/viter.c
LOCAL_C_INCLUDES := pngquant/lib
LOCAL_CFLAGS += -O3 -fno-math-errno -funroll-loops -fomit-frame-pointer -Wall -std=c99 -fopenmp
LOCAL_LDFLAGS += -fopenmp
ifeq ($(TARGET_ARCH_ABI),x86)
LOCAL_CFLAGS += -mtune=atom -msse -mfpmath=sse -mssse3 -DUSE_SSE=1
endif
include $(BUILD_SHARED_LIBRARY)
您可以扩展此Android.mk文件,以在使用libimagequant的源中添加自己的本机库:include $(CLEAR_VARS)LOCAL_MODULE:= yourlib LOCAL_SRC_FILES:= yoursources.c LOCAL_C_INCLUDES:= pngquant / lib LOCAL_SHARED_LIBRARIES:= imagequant
LOCAL_CFLAGS += -O3 -fno-math-errno -funroll-loops -fomit-frame-pointer -Wall -std=c99 -fopenmp
LOCAL_LDFLAGS += -fopenmp
ifeq ($(TARGET_ARCH_ABI),x86)
LOCAL_CFLAGS += -mtune=atom -msse -mfpmath=sse -mssse3 -DUSE_SSE=1
endif
include $(BUILD_SHARED_LIBRARY)
如果您只想使用默认设置使用此库,那么我已经制作了一个简单的Android库 ,可以满足您的目的。
在您的build.gradle中:
dependencies {
compile 'com.ndahlquist:pngquant-android:0.2'
}
在您的Android应用中:
File inputPngFile = getYourPng();
File outputPngFile = getOutputFile()
new LibPngQuant().pngQuantFile(inputFile, outputFile);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.