webassemblyでCでプログラミングしています。
Cとjavascriptの変換で苦しんでおります
https://kripken.github.io/emscripten-site/docs/porting/connecting_cpp_and_javascript/Interacting-with-code.html
を読んで以下の関数を作りました。
C
1void showImage(cv::Mat img){ 2#ifdef EMSCRIPTEN 3 cout<<"EMSCRIPTEN"<<endl; 4 5 EM_ASM( 6 function ImageToBase64(img, mime_type) { 7 // New Canvas 8 var canvas = document.createElement('canvas'); 9 canvas.width = img.width; 10 canvas.height = img.height; 11 // Draw Image 12 var ctx = canvas.getContext('2d'); 13 ctx.drawImage(img, 0, 0); 14 // To Base64 15 return canvas.toDataURL(mime_type); 16 } 17 18 var b64 = ImageToBase64(img, "image/jpeg"); 19 window.open(b64); 20 ); 21#else 22 cout<<"LINUX"<<endl; 23#endif 24 25}
これ実行すると
ImageToBase64のところで " img is not defined"
と言われて実行エラーを出してしまいます。
書いているときから思っていたがcv::matをそのままjavascriptにもちこむのはやはりNGらしいです。
それではどうやってもちこんだらいいのでしょうか?
なにかJavascriptのblobかなにかに変換する方法を知りませんか?
その後とりあえず持ちこむことは成功して
C
1 2#ifdef EMSCRIPTEN 3#include <emscripten.h> 4 5EM_JS(int, showImage, (cv::Mat img), { 6 7 function ImageToBase64(img, mime_type) { 8 // New Canvas 9 var canvas = document.createElement('canvas'); 10 canvas.width = img.width; 11 canvas.height = img.height; 12 // Draw Image 13 var ctx = canvas.getContext('2d'); 14 ctx.drawImage(img, 0, 0); 15 // To Base64 16 return canvas.toDataURL(mime_type); 17 } 18 19 var b64 = ImageToBase64(img, "image/jpeg"); 20 window.open(b64); 21 return 0; 22}); 23 24#endif 25 26 27void ofApp::saveImage(cv::Mat img){ 28#ifdef EMSCRIPTEN 29 cout<<"EMSCRIPTEN"<<endl; 30 showImage(img); 31#else 32 cout<<"LINUX"<<endl; 33#endif 34 35}
みたいな感じのですが今度はjavascriptでエラーを出してしまいます。
こんな感じです。
Uncaught TypeError: Failed to execute ‘drawImage’ on ‘CanvasRenderingContext2D’: The provided value is not of type ‘(CSSImageValue or HTMLImageElement or SVGImageElement or HTMLVideoElement or HTMLCanvasElement or ImageBitmap or OffscreenCanvas)’
at ImageToBase64 (:6931/OFNewPlayer.js:1)
at _showImage (:6931/OFNewPlayer.js:1)
これからするとやはり型が違うらしい。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。