画像ファイルの表示について
開発初心者の為、説明がわかりづらければすいません。。
xpa3.2にて、外部コールでUSBに接続しているカメラを起動し、撮影した画像をNASに移動させて、その画像ファイルと受注を紐づけるプログラムを開発しました。
紐づけた画像もそのプログラム内で表示させているのですが、mgerror.logにて以下のエラーが出て困っています。
<-1> 24/06/2022 16:32:40.695 [Error ] - [MgGui.dll]
場所 System.Environment.GetStackTrace(Exception e, Boolean needFileInfo)
場所 System.Environment.get_StackTrace()
場所 com.magicsoftware.rte.CoreExecutor.WriteExceptionToLog(Int64 contextID, String msg)
場所 com.magicsoftware.rte.GuiEventsProcessor.WriteExceptionToLog(String message)
場所 com.magicsoftware.unipaas.Events.WriteExceptionToLog(String msg)
場所 com.magicsoftware.unipaas.gui.low.ImageLoader.HandleException(String urlString, Exception e)
場所 com.magicsoftware.support.ImageUtils.GetStreamFromFile(String& fileName)
場所 com.magicsoftware.support.ImageUtils.LoadImage(String fileName)
場所 com.magicsoftware.unipaas.gui.low.ImageLoader.GetImage(String fileName)
場所 com.magicsoftware.unipaas.gui.low.GuiUtilsBase.getImageFromFile(String fileName)
場所 com.magicsoftware.unipaas.gui.low.GuiCommandQueueBase.Run()
場所 System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
場所 System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
場所 System.Delegate.DynamicInvokeImpl(Object[] args)
場所 System.Windows.Forms.Control.InvokeMarshaledCallbackDo(ThreadMethodEntry tme)
場所 System.Windows.Forms.Control.InvokeMarshaledCallbackHelper(Object obj)
場所 System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
場所 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
場所 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
場所 System.Windows.Forms.Control.InvokeMarshaledCallback(ThreadMethodEntry tme)
場所 System.Windows.Forms.Control.InvokeMarshaledCallbacks()
場所 System.Windows.Forms.Control.WndProc(Message& m)
場所 System.Windows.Forms.ScrollableControl.WndProc(Message& m)
場所 System.Windows.Forms.Form.WndProc(Message& m)
場所 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
場所 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
場所 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
場所 System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
場所 System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
場所 System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
場所 System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
場所 com.magicsoftware.unipaas.gui.low.GUIMain.messageLoop()
場所 com.magicsoftware.unipaas.Manager.MessageLoop()
場所 com.magicsoftware.rte.RTEmanager.ExecuteMainThread(String args)
場所 com.magicsoftware.rte.RTEmanager.Main(), Program: "Menu_20220621.Menu.SubMenu.[プログラム名]".
これは一体何に対するエラーなのでしょうか?
過去のフォーラムも読みましたが、【 [Error ] - [MgGui.dll] 】に対する記述はあっても、どれも画像表示に対するエラーではなく、明確な解決方法も私では見つけられなかった為、投稿させて頂きます。
同様のエラーが出た方、または解決法をご存知のかたはどうかご回答のほど宜しくお願い致します。
ちなみに、上記エラーを繰り返していると、
<-1> 24/06/2022 15:14:16.455 [Error ] - [MgGui.dll] System.OutOfMemoryException :
場所 System.Drawing.Graphics.CheckErrorStatus(Int32 status)
場所 System.Drawing.Graphics.DrawImage(Image image, Rectangle destRect, Int32 srcX, Int32 srcY, Int32 srcWidth, Int32 srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttrs, DrawImageAbort callback, IntPtr callbackData)
場所 System.Drawing.Graphics.DrawImage(Image image, Rectangle destRect, Int32 srcX, Int32 srcY, Int32 srcWidth, Int32 srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttr)
場所 com.magicsoftware.support.ImageUtils.GetScaledImage(Image image, Int32 width, Int32 height, Rectangle srcRect)
場所 com.magicsoftware.support.ImageUtils.GetScaledImage(Image image, Int32 width, Int32 height)
場所 com.magicsoftware.support.ImageUtils.GetImageByStyle(Image srcImage, CtrlImageStyle imageStyle, Size size)
場所 com.magicsoftware.unipaas.gui.low.LgImage.SetBackgroundImage()
場所 com.magicsoftware.unipaas.gui.low.LgImage.SetImage(Image image, CtrlImageStyle imageStyle)
場所 com.magicsoftware.unipaas.gui.low.GuiCommandQueueBase.setImageInfo(GuiCommand guiCommand, Image image)
場所 com.magicsoftware.unipaas.gui.low.GuiCommandQueueBase.Run()
メモリが不足しています。, Program: "Menu_20220621.Menu.SubMenu.[プログラム名]"
.
と出て、画像を表示できなくなってしまいます。
-
> 外部コールでUSBに接続しているカメラを起動し、撮影した画像をNASに移動させて、
> その画像ファイルと受注を紐づけるプログラムを開発しました。障害の切り分けですが、外部コールの部分を一時的に外して、事前に用意した画像をNASから読み込んで受注プログラムに表示させるというだけの処理を行ってみた場合はどうなるでしょうか?
※RIA + iOSまたはAndroidのカメラなら簡単なのですが。。。
-
mgerror.logにエラーの記述はあるけれど、やりたい事は実現出来ているのでしょうか?
私もuniPaaS V1 Plus、xpa 3、xpa 4などの客先環境のmgerror.logには似たようなエラーは
記述されています。
<-1> 24/06/2022 16:30:39.997 [Error ] - [MgGui.dll]
場所 System.Environment.GetStackTrace(Exception e, Boolean needFileInfo)
場所 System.Environment.get_StackTrace()
場所 com.magicsoftware.rte.CoreExecutor.WriteExceptionToLog(Int64 contextID, String msg)
場所 com.magicsoftware.rte.RteExecutor.ShowWindowsHelp(String filePath, HelpCommand helpCmd, String helpKey)
場所 com.magicsoftware.rte.RteExecutor.ShowHelp(Int32 taskID, Int32 ditIdx)
場所 RteExecutorEndpoint.InvokeShowHelp(Int32 taskID, Int32 ditIdx)
場所 RteExecutorBridge.ShowHelp(RteExecutorBridge* , Int32 taskID, Int32 ditIdx)
場所 CoreExecutorEndpoint.EventsLoop()
場所 CoreExecutorGateway.EventsLoop()
場所 com.magicsoftware.rte.RTEmanager.ExecuteWorkThread()
場所 System.Threading.ThreadHelper.ThreadStart_Context(Object state)
場所 System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
場所 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
場所 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
場所 System.Threading.ThreadHelper.ThreadStart(), Program: "メニュー.新)メニュー画面.サブメニュー.M.売上伝票入力.T.鑑表示. P.F6見積→売上". -
ISHIJIMA さん
返信が遅れてしまいすいません。
ズームイベントにて画像を表示させているのですが、エラーが起きている明確な場所は正直わからないです。
また、記述し忘れていたのですが、このエラーは客先でのみ発生しておりますので、
画像を表示させないパターンは試してみます。
-
tanda さん
返信が遅れてしまいすいません。
記述していなかったのですが、その紐づけた受注と画像を一覧で確認する為の照会画面でも同じようなエラーが起きていますので、NASからの画像表示だけでも出るみたいです。。
-
nkmt さん
返信が遅れてしまいすいません。
プログラムは何も問題なく動いており、やりたい事は出来ているのですが、
上記に記載した通り、繰り返していると違うエラーが出て画像が読み込めなくなってしまうんです。
同じようなエラーが出ているのですね..
それは同じように画像表示させるようなプログラムでしょうか?
ちなみに私も客先でしかエラーが出ないんです。。
-
画像を表示できなくなってしまいますと書かれていらっしゃいますね。
よく見てませんで、失礼しました。
INIファイルの中には
ImageCacheSize = 256
ImageCacheCheckTime = N
というのがありそうです。
Magicのバージョンによっては
ImageCacheSize が無効な分もあったと思いますが
ImageCacheSize = -1 にすると、画像キャッシュを使わなかったと思います。 -
ISHIJIMA さん
環境の違いというと
今回エラーが出た客先でのPCのメモリが4GBで私の環境が8GBという事ぐらいですかね。。
ただ、別客先でも同じようなプログラムを作った事があるのを思い出し調べてたんですが、
同じPCメモリ8GBの環境でかつNASではなくサーバーに画像を保存しているパターンでも
エラーは出ていました。。
なのでNASが原因にはなっていないかもしれないです。。
-
nkmt さん
過去フォーラムに「ImageCacheSize」について書かれていましたので、調べたんですが、
Magic.xpa 3.x では無効になっているみたいですね。。
ただiniファイルにはなぜかImageCacheSizeがあるので念の為、ImageCacheSize = -1 にはしているんですが、特に関係なくエラーは出てしまいますね。。
-
追記
今回のケースでは、客先でしかエラーが出ていないんですが、
過去に同じようなプログラム開発をした別客先のシステムだと、私の環境でも同じようなエラーが出ていました。。。
事前調査不足でした。すいません。
-
ISHIJIMA さん
書き方がややこしくてすいません。。
色々探っているとどうも「画像表示しているプログラム」でエラーが発生しているようで。。
なので、「NASに移動」「カメラ起動」している事は関係なさそうですね。
-
ISHIJIMA さんなるほど。。少し開発環境の方で、エラーが出るタイミングを探ってみます。色々とありがとうございます。
サインインしてコメントを残してください。
コメント
11件のコメント