コードを実行しようとすると、UnsatisfiedLinkError が発生しました。したがって、これら2つのクラスを.jarにパックしました
明るさプラグイン
package brightness.copy;
import interfaces.IEnhancementOption;
import plugins.IEnhancementPlugin;
import window.EditImageWindow;
public class BrightnessPlugin implements IEnhancementPlugin
{
public EditImageWindow editWindow;
@Override
public String getName()
{
return "Brightness";
}
@Override
public IEnhancementOption getEnhacement(EditImageWindow editWindow)
{
return new BrightnessEnhancement(editWindow);
}
}
輝度向上
package brightness.copy;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.ImageData;
import org.eclipse.swt.widgets.Composite;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.highgui.Highgui;
import widget.edit.enhancement.AEnhancementOption;
import window.EditImageWindow;
public class BrightnessEnhancement extends AEnhancementOption
{
public EditImageWindow editWindow;
public BrightnessEnhancement(Composite parent)
{
super(parent);
this.editWindow = (EditImageWindow) parent;
}
@Override
public void initialize()
{
setEnhancementName("Brightness");
this.getButton().addSelectionListener(this);
}
@Override
public void widgetSelected(SelectionEvent e)
{
double alpha = 1;
double beta = 31;
try{
System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
Mat source = Highgui.imread(editWindow.getImagePath(),Highgui.CV_LOAD_IMAGE_COLOR);
Mat destination = new Mat(source.rows(),source.cols(),
source.type());
source.convertTo(destination, -1, alpha, beta);
Highgui.imwrite("temp/brightness.jpg", destination);
ImageData imgData = new ImageData("temp/brightness.jpg");
editWindow.setImageData(imgData);
editWindow.getImageEditor().reCallPicture(imgData);
editWindow.setEffect("brightness");
}catch (Exception error)
{
System.out.println("error: " + error.getMessage());
}
}
@Override
public void widgetDefaultSelected(SelectionEvent e) {
// TODO Auto-generated method stub
}
}
次に、BrightnessEnhancement を画像に実装しようとすると、エラー UnsatisfiedLinkError が表示されました。
拡張機能を実装するコードは次のとおりです。
Properties loadProp = new Properties();
List<IEnhancementPlugin> plugins = PluginManager.getEnhancementPlugins();
for (IEnhancementPlugin p : plugins)
{
try {
FileInputStream in = new FileInputStream("Plugins/Enhancement/" + p.getName()+ ".properties");
loadProp.load(in);
in.close();
if(loadProp.getProperty("active").equals("true"))
{
addEnhancementOption(p.getEnhacement(this));
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
そしてエラー
Exception in thread "main" java.lang.UnsatisfiedLinkError: org.opencv.highgui.Highgui.imread_0(Ljava/lang/String;I)J
at org.opencv.highgui.Highgui.imread_0(Native Method)
at org.opencv.highgui.Highgui.imread(Highgui.java:316)
at brightness.copy.BrightnessEnhancement.widgetSelected(BrightnessEnhancement.java:39)
at org.eclipse.swt.widgets.TypedListener.handleEvent(Unknown Source)
at org.eclipse.swt.widgets.EventTable.sendEvent(Unknown Source)
at org.eclipse.swt.widgets.Display.sendEvent(Unknown Source)
at org.eclipse.swt.widgets.Widget.sendEvent(Unknown Source)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Unknown Source)
at org.eclipse.swt.widgets.Display.readAndDispatch(Unknown Source)
at window.AWindow.show(AWindow.java:22)
at widget.listimage.ListImage.handleEvent(ListImage.java:74)
at org.eclipse.swt.widgets.EventTable.sendEvent(Unknown Source)
at org.eclipse.swt.widgets.Display.sendEvent(Unknown Source)
at org.eclipse.swt.widgets.Widget.sendEvent(Unknown Source)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Unknown Source)
at org.eclipse.swt.widgets.Display.readAndDispatch(Unknown Source)
at window.AWindow.show(AWindow.java:22)
at main.Main.main(Main.java:10)
スクリーンショットはこちら: http://imgur.com/V6Xct7K ボタンを押すとエラーが発生します。
私は他の投稿を読みましたが、1つの解決策は System.loadLibrary( Core.NATIVE_LIBRARY_NAME ); を追加すると言いました。コードを追加しましたが、問題はまだ発生しています。誰かがこの問題の解決策を持っていれば、本当に感謝しています。ありがとうございました!
PS 1.それらをjarに入れなくても機能しますが、jarから両方をロードできる必要があります。2. 関数 addEnhancement は .jar からロードされますが、パッケージがプロジェクトにあった場合にも機能します。