我在将使用javascript创建的blob上传到我的服务器时遇到问题.基本思想是用户上传图像,并在javascript中我裁剪图像并在传输之前对其进行下采样.
图像处理工作正常,但上传本身无法正常工作.以下是执行从canvas到blob的上传和转换的代码
function uploadCanvasData()
{
var canvas = $('#ImageDisplay').get(0);
var dataUrl = canvas.toDataURL("image/jpeg");
var blob = dataURItoBlob(dataUrl);
var formData = new FormData();
formData.append("file", formData);
var request = new XMLHttpRequest();
request.onload = completeRequest;
request.open("POST", "IdentifyFood");
request.send(formData);
}
function dataURItoBlob(dataURI)
{
var byteString = atob(dataURI.split(',')[1]);
var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0]
var ab = new ArrayBuffer(byteString.length);
var ia = new Uint8Array(ab);
for (var i = 0; i < byteString.length; i++)
{
ia[i] = byteString.charCodeAt(i);
}
var bb = new Blob([ab], { "type": mimeString }); …
Run Code Online (Sandbox Code Playgroud) 我对C++/CLI中的资源管理非常困惑.我认为我有一个句柄(没有任何双关语),但我偶然发现了整个auto_gcroot<T>
课程,同时查看了头文件,导致谷歌搜索,然后是阅读文档的更好部分,现在混乱.所以我想我会转向社区.
我的问题涉及auto_handle/stack语义和auto_gcroot/gcroot之间的区别.
auto_handle:我的理解是这将清理托管函数中创建的托管对象.我的困惑是,垃圾收集者不应该为我们这样做吗?这不是托管代码的重点吗?更具体:
//Everything that follows is managed code
void WillThisLeak(void)
{
String ^str = gcnew String ^();
//Did I just leak memory? Or will GC clean this up? what if an exception is thrown?
}
void NotGoingToLeak(void)
{
String ^str = gcnew String^();
delete str;
//Guaranteed not to leak, but is this necessary?
}
void AlsoNotGoingToLeak(void)
{
auto_handle<String ^> str = gcnew String^();
//Also Guaranteed not to leak, but is this necessary?
}
void DidntEvenKnowICouldDoThisUntilToday(void)
{
String …
Run Code Online (Sandbox Code Playgroud)我正在尝试使用cmake设置C++/CLI项目.我在visual studio 2010上取得了成功,但我现在正在使用一个需要visual studio 2008的传统解决方案.在visual studio 2010中,设置我的cmake就足够了:
set_target_properties(${PROJECT_NAME} PROPERTIES VS_DOTNET_REFERENCES "${CMAKE_CURRENT_SOURCE_DIR}/../OrionMaster/3rdParty/GMap.NET.Core.dll;System;System.Core;System.Data;System.Drawing;System.Xml;WindowsBase")
set_target_properties(${PROJECT_NAME} PROPERTIES COMPILE_FLAGS "/clr /EHa")
set_target_properties(${PROJECT_NAME} PROPERTIES DEBUG_POSTFIX "d")
if(CMAKE_CXX_FLAGS_DEBUG MATCHES "/RTC1")
string(REPLACE "/RTC1" " " CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
endif()
if(CMAKE_CXX_FLAGS MATCHES "/EHsc")
string(REPLACE "/EHsc" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
endif()
Run Code Online (Sandbox Code Playgroud)
当我在visual studio 2010下检查项目时,我可以看到所有引用和"公共语言运行时支持"已打开.当我在visual studio 2008中尝试它时,我没有看到任何引用,并且项目设置为"No Common Language Runtime Support"如果我再查看编译器选项,我可以看到/ clr正在传递给编译器.但是我仍然会遇到很多编译器错误,可能是因为它缺少引用.有没有人知道如何正确设置它?
我试图遍历矩阵的列(例如,它连接成矩阵的一堆列向量,我想分别对每个列向量进行操作).使用for循环很容易做到这一点:
for(int n = 0; n < mat.cols; n++)
{
cv::Mat c = mat.col(n);
// do stuff to c
}
Run Code Online (Sandbox Code Playgroud)
但是如果可能的话我想使用迭代器这样做,以便我可以使用std :: accumulate或std :: transform来简化我的代码.
所以我基本上都在寻找类似的东西
for each Mat c in mat.columns
Run Code Online (Sandbox Code Playgroud)
Mat
具有begin<>
和end<>
功能,但据我所知,它只能用于迭代单个元素.
这可以以某种方式完成吗?
为了清楚我想写
cv::Mat input;
cv::Mat output = std::accumulate(input.begincols(), input.endcols(), cv::Mat::zeros(n,k,CV_64F),
[](const cv::Mat &acum, const cv::Mat &column) { return acum + column * 5; });
Run Code Online (Sandbox Code Playgroud)
举个简单的例子.
所以既然没有得到回答,如果有人有一个本土解决方案来提供这样的迭代器,我会看看,否则如果我有机会我可能会自己调查一下
我正在尝试在Ubuntu 16.04上构建clang trunk,无论我尝试什么,我都会遇到构建错误.首先,我对gcc 5.4构建了llvm/clang/libc ++/libc ++ abi,这很好用.现在我正在尝试使用我刚刚构建的clang来重建llvm/clang/libc ++/libc ++ abi.此操作失败,并显示以下错误消息:
[162/4396] Linking CXX executable bin/llvm-tblgen FAILED:
: && /usr/local/bin/clang++ -stdlib=libc++
-fPIC
-fvisibility-inlines-hidden -Wall -W -Wno-unused-parameter
-Wwrite-strings -Wcast-qual -Wmissing-field-initializers
-pedantic -Wno-long-long -Wcovered-switch-default
-Wnon-virtual-dtor -Wdelete-non-virtual-dtor
-Werror=date-time -std=c++11 -fcolor-diagnostics
-ffunction-sections -fdata-sections -O3 -DNDEBUG
-lc++ -lc++abi -Wl,-allow-shlib-undefined
-Wl,-O3 -Wl,--gc-sections
utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/AsmMatcherEmitter.cpp.o
utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/AsmWriterEmitter.cpp.o
utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/AsmWriterInst.cpp.o
utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/Attributes.cpp.o
utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/CallingConvEmitter.cpp.o
utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/CodeEmitterGen.cpp.o
utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/CodeGenDAGPatterns.cpp.o
utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/CodeGenInstruction.cpp.o
utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/CodeGenMapTable.cpp.o
utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/CodeGenRegisters.cpp.o
utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/CodeGenSchedule.cpp.o
utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/CodeGenTarget.cpp.o
utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/DAGISelEmitter.cpp.o
utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/DAGISelMatcherEmitter.cpp.o
utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/DAGISelMatcherGen.cpp.o
utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/DAGISelMatcherOpt.cpp.o
utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/DAGISelMatcher.cpp.o
utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/DFAPacketizerEmitter.cpp.o
utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/DisassemblerEmitter.cpp.o
utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/FastISelEmitter.cpp.o
utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/FixedLenDecoderEmitter.cpp.o
utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/InstrInfoEmitter.cpp.o
utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/IntrinsicEmitter.cpp.o
utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/OptParserEmitter.cpp.o
utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/PseudoLoweringEmitter.cpp.o
utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/RegisterInfoEmitter.cpp.o
utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/SearchableTableEmitter.cpp.o
utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/SubtargetEmitter.cpp.o
utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/TableGen.cpp.o
utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/X86DisassemblerTables.cpp.o
utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/X86ModRMFilters.cpp.o
utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/X86RecognizableInstr.cpp.o
utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/CTagsEmitter.cpp.o
-o bin/llvm-tblgen …
Run Code Online (Sandbox Code Playgroud) 我运行一个CI服务器,用于构建自定义Linux内核.CI服务器功能不强,每个构建的时间限制为3h.为了在这个限制内工作,我有了使用ccache缓存内核构建的想法.我希望我可以在每个次要版本发布时创建一个缓存,并将其重新用于补丁版本,例如我有一个我为4.18制作的缓存,我想用于所有4.18.x内核.
删除构建时间戳后,这适用于我正在构建的确切内核版本.对于上面引用的4.18内核,在CI上构建它会提供以下统计信息:
$ ccache -s
cache directory
primary config
secondary config (readonly) /etc/ccache.conf
stats zero time Thu Aug 16 14:36:22 2018
cache hit (direct) 17812
cache hit (preprocessed) 38
cache miss 0
cache hit rate 100.00 %
called for link 3
called for preprocessing 29039
unsupported code directive 4
no input file 2207
cleanups performed 0
files in cache 53652
cache size 1.4 GB
max cache size 5.0 GB
Run Code Online (Sandbox Code Playgroud)
缓存命中率100%和一小时完成构建,梦幻般的统计数据和预期.
不幸的是,当我尝试构建4.18.1时,我得到了
cache directory
primary config
secondary config (readonly) /etc/ccache.conf
stats …
Run Code Online (Sandbox Code Playgroud) 我正在创建一个C++/CLI DLL,它将被加载到遗留的c ++应用程序中.传统应用程序通过对LoadLibrary的传统调用来完成此操作.应用程序和C++/CLI dll都以64位模式编译.
当LoadLibrary调用发生时,它会因错误193而失败.这通常意味着某些非64位组件正在尝试加载.当我在visual studio 2010中查看dll加载输出时,我看到加载mscoree.dll时发生了故障(确切地说,我看到我的dll加载,然后mscoree加载,然后mscoree卸载,然后我的dll卸载,然后返回错误).特别是C:\ Windows\System32\mscoree.dll正在加载,当我检查这个mscoree.dll时,我发现它的目标是I386.
如何确保我的应用程序将链接到正确的mscoree.dll?我知道这可以用清单来完成,但我找不到任何关于设置清单的好信息.理想的解决方案是允许在32位或64位模式下编译并定位正确的mscoree.dll.
作为旁注,我发现并行文件夹中的mscoree.dll是我验证的64位模式,并将其复制到我的应用程序目录中,希望它能先获取该文件.这不起作用,仍然加载C:\ Windows\System32版本.
谢谢,
马克斯
Microsoft (R) .NET Framework CorFlags Conversion Tool. Version 4.0.30319.1
Copyright (c) Microsoft Corporation. All rights reserved.
Version : v4.0.30319
CLR Header: 2.5
PE : PE32+
CorFlags : 16
ILONLY : 0
32BIT : 0
Signed : 0
Run Code Online (Sandbox Code Playgroud)
PS C:\Windows\System32> pedump.exe .\mscoree.dll
Dump of file .\MSCOREE.DLL
File Header
Machine: 014C (I386)
Number of Sections: 0004
TimeDateStamp: 4B90752B -> Thu Mar 04 22:06:19 2010
PointerToSymbolTable: …
Run Code Online (Sandbox Code Playgroud) 我正在为本机c ++类开发C++/CLI包装器.C++/CLI包装器正在WPF应用程序中使用.我在尝试编组字符串时遇到了一个奇怪的问题.
WPF应用程序将System::String
对象传递给我的包装器.该包装然后转换System::String
到std::string
了本机类的期望.这一切都很顺利,但是一旦我将字符串传递给本机对象,它就是空的.
这是一些相关的代码
WPF事件处理程序(C#)
private void tbInputConfig_TextChanged(object sender, TextChangedEventArgs e)
{
_OrionBasicApp.ConfigTemplateFile = tbInputConfig.Text;
}
Run Code Online (Sandbox Code Playgroud)
包装类中的属性(C++/CLI)
void BasicApp::ConfigTemplateFile::set(String ^value)
{
std::string val = marshal_as<std::string>(value);
_NativeApp->setConfigTemplateFile(val);
}
Run Code Online (Sandbox Code Playgroud)
本地代码(C++)
void Basic_App::setConfigTemplateFile(const std::string& template_file)
{
m_gParams.configTemplateFile = template_file;
}
Run Code Online (Sandbox Code Playgroud)
所以,当我在WPF应用程序突破和使用调试器的跟踪中,字符串对象看起来很好,在std::string val
编组看起来不错,但参数template_file
的setConfigFile
函数是一个空字符串.当我退出本机函数时,我可以看到std::string val
变量看起来仍然很好.
我尝试过使用Marshal::StringToHGlobalAnsi
函数,它会产生相同的结果.我已经尝试更改本机函数以获取字符串的副本而不是引用,这会产生关于无效内存块的异常(如果请求,我将发布确切的消息).我试过在堆上分配字符串,没有运气.
现在为踢球者:本机代码是用Microsoft Visual Studio 2008编译的,而包装器+ wpf代码是用2010编译的.我希望这不是问题,因为我们将代码库迁移到其他版本并不容易.
有任何想法吗?
UPDATE
我能够将本机代码切换到visual studio 2010,这确实解决了问题.(为什么微软必须让我的生活变得如此困难?)虽然我确实建立了系统,但是项目的主角给了我关于这个解决方案的主要麻烦(他担心它可能无法正常运行或我们将不得不切换依赖库).
那么这个问题的解决方案是不是迫使我转换Visual Studio版本?
我正在开发一个 WPF 应用程序,需要以快速帧速率(我们想要 30 fps)显示多个视频流。视频流是 1920x1080 原始 (RGB24) 帧(它们存储在 System.Drawing.Bitmap 中)。有谁对如何实现这一目标有任何想法?
更多细节:
如果有人想看的话,我可以提供我们尝试过的代码示例。
谢谢!
我有一个类用于保存从配置文件加载的值.为了使这个类更容易使用,我已经为一些基本类型设置了许多隐式转换.
我想要转换为的类型之一是IEnumerable(T).例如,如果程序员在配置文件中有这样的值
a = "1,2,3,4"
Run Code Online (Sandbox Code Playgroud)
在C#代码中,他可以写
IEnumerable<int> a = Config.a;
Run Code Online (Sandbox Code Playgroud)
理想情况下,我想写的是这个
public static implicit operator IEnumerable<T>(ConfigurationValue val)
{
string value = val;
string[] parts = value.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
List<T> convertedTypes = new List<T>();
foreach (string part in parts)
{
T converted = Convert.ChangeType(part.Trim(), typeof(T));
convertedTypes.Add(converted);
}
return convertedTypes;
}
Run Code Online (Sandbox Code Playgroud)
但这给了我语法错误,T未定义.有没有办法定义这样的转换或是否有特殊的语法?
另外,对于记录,我在.Net Framework 4.0中使用C#4.0