我有一个SVG文件,其定义大小为16x16.当我使用Image Magick的转换程序将其转换为PNG时,我得到一个16x16像素的PNG,这太小了:
convert test.svg test.png
Run Code Online (Sandbox Code Playgroud)
我需要指定输出PNG的像素大小.-size
参数似乎被忽略,-scale
参数在转换为PNG 后缩放PNG.到目前为止,我通过使用-density
参数得到了最好的结果:
convert -density 1200 test.svg test.png
Run Code Online (Sandbox Code Playgroud)
但是我不满意,因为我想要以像素为单位指定输出大小而不用数学来计算密度值.所以我想做这样的事情:
convert -setTheOutputSizeOfThePng 1024x1024 test.svg test.png
Run Code Online (Sandbox Code Playgroud)
那么我在这里使用的神奇参数是什么?
我们有一个Maven 2项目,里面有很多模块.例:
<modules>
<module>common</module>
<module>foo</module>
<module>data</module>
<module>bar</module>
... more ...
</module>
Run Code Online (Sandbox Code Playgroud)
假设构建"数据"模块非常耗时,我们希望在CI服务器构建项目时将其排除.目前我们使用两个pom.xml文件来实现这一目标.一个包含所有模块,另一个包含所有模块,除了可以省略CI的模块.但这很烦人,因为有时我们会忘记将新模块放入两个文件中.
有没有一个解决方案不需要两个单独的模块列表?
我知道Git会以某种方式自动检测文件是二进制还是文本,如果需要,可以使用gitattributes手动设置它.但是有没有办法向GIT询问它如何处理文件?
所以我们可以说我有在这两个文件一个Git仓库:一个ascii.dat含纯文本和文件binary.dat含随机二进制的东西文件.Git将第一个dat文件作为文本处理,将辅助文件作为二进制文件处理.现在我想写一个Git webfrontend,它有一个文本文件查看器和二进制文件的特殊查看器(例如,显示十六进制转储).当然,我可以实现自己的文本/二进制检查,但如果查看器依赖于Git如何处理这些文件的信息,那将会更有用.
那么我怎么能问Git它是否将文件视为文本或二进制文件?
我正在学习C++(来自Java),我正在尝试理解如何在C++中正确使用IO流.
假设我有一个Image
包含图像像素的类,我重载了提取操作符以从流中读取图像:
istream& operator>>(istream& stream, Image& image)
{
// Read the image data from the stream into the image
return stream;
}
Run Code Online (Sandbox Code Playgroud)
所以现在我能够读到这样的图像:
Image image;
ifstream file("somepic.img");
file >> image;
Run Code Online (Sandbox Code Playgroud)
但现在我想使用相同的提取运算符从自定义流中读取图像数据.假设我有一个包含压缩形式图像的文件.因此,我可能想要实现自己的输入流,而不是使用ifstream.至少我就是这样用Java做的.在Java中,我会编写一个扩展InputStream
类并实现该int read()
方法的自定义类.所以这很容易.用法看起来像这样:
InputStream stream = new CompressedInputStream(new FileInputStream("somepic.imgz"));
image.read(stream);
Run Code Online (Sandbox Code Playgroud)
所以使用相同的模式我想在C++中这样做:
Image image;
ifstream file("somepic.imgz");
compressed_stream stream(file);
stream >> image;
Run Code Online (Sandbox Code Playgroud)
但也许这是错误的方式,不知道.扩展istream
类看起来相当复杂,经过一些搜索后我发现了一些关于扩展的提示streambuf
.但是这个例子对于这么简单的任务看起来非常复杂.
那么在C++中实现自定义输入/输出流(或streambufs?)的最佳方法是什么?
有些人建议不要使用iostreams,而是使用迭代器,boost或自定义IO接口.这些可能是有效的替代品,但我的问题是关于iostreams.接受的答案产生了下面的示例代码.为了更容易阅读,没有标题/代码分离,导入整个std命名空间(我知道这在实际代码中是一件坏事).
这个例子是关于读写垂直xor编码的图像.格式非常简单.每个字节代表两个像素(每像素4位).每行与前一行xor'd.这种编码使图像准备好进行压缩(通常会导致大量的0字节更容易压缩).
#include <cstring>
#include <fstream>
using namespace std;
/*** vxor_streambuf class ******************************************/
class vxor_streambuf: public …
Run Code Online (Sandbox Code Playgroud) 我有一个B
包含类向量的类A
.我想通过构造函数初始化此向量.类A
输出一些调试信息,以便我可以看到它何时被构造,破坏,复制或移动.
#include <vector>
#include <iostream>
using namespace std;
class A {
public:
A() { cout << "A::A" << endl; }
~A() { cout << "A::~A" << endl; }
A(const A& t) { cout <<"A::A(A&)" << endl; }
A(A&& t) { cout << "A::A(A&&)" << endl; }
};
class B {
public:
vector<A> va;
B(const vector<A>& va) : va(va) {};
};
int main(void) {
B b({ A() });
return 0;
}
Run Code Online (Sandbox Code Playgroud)
现在,当我运行这个程序(使用GCC选项编译,-fno-elide-constructors
因此移动构造函数调用未被优化掉)时,我得到以下输出:
A::A …
Run Code Online (Sandbox Code Playgroud) 我正在编写一个使用Spring 4.0.4和Spring Boot 1.0.2的Web应用程序,使用Tomcat作为嵌入式Web容器,我想实现一个全局异常处理,它拦截所有异常并以特定方式记录它们.我的简单要求是:
到目前为止,我的解决方案看起来像这样(简化,没有日志记录,也没有重定向到错误视图):
@Controller
@RequestMapping("/errors")
public class ErrorHandler implements EmbeddedServletContainerCustomizer
{
@Override
public void customize(final ConfigurableEmbeddedServletContainer factory)
{
factory.addErrorPages(new ErrorPage("/errors/unexpected"));
factory.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/errors/notfound"));
}
@RequestMapping("unexpected")
@ResponseBody
public String unexpectedError(final HttpServletRequest request)
{
return "Exception: " + request.getAttribute("javax.servlet.error.exception");
}
@RequestMapping("notfound")
@ResponseBody
public String notFound()
{
return "Error 404";
}
}
Run Code Online (Sandbox Code Playgroud)
结果是该unexpectedError
方法正确处理控制器中抛出的异常,并且该方法处理404状态代码notFound
.到目前为止很好,但我有以下问题:
javax.servlet.error.exception
.这甚至不是抛出的异常,它是一个实例,org.springframework.web.util.NestedServletException
我必须深入到这个嵌套异常中来获取真实异常.我很确定有一种更简单的方法,但我找不到它.那么我该如何解决这些问题呢?或者我实现这个全局异常处理程序的方式是完全错误的,还有更好的选择吗?
我想在Windows 7上发布Java GUI应用程序.此应用程序使用Swing Toolkit,不需要任何本机代码.使用NSIS安装程序安装该应用程序.我想尽可能地将此应用程序集成到Windows 7中.这意味着:
WinRun4j是一个启动Java应用程序的EXE文件.因为应用程序没有分叉新的Java进程,Windows认为EXE文件是应用程序.所以任务栏没有问题.文件关联有效,因为文件可以简单地与EXE文件关联.
问题:
Launch4J创建了一个32位EXE,它启动了一个外部Java进程来启动Java应用程序.因此,与WinRun4J不同,它也可以启动64位Java.
问题:
System.out.println
headerType="gui"
无论是否从控制台启动应用程序,都不会打印到控制台.在Windows上,您只需双击JAR文件即可启动该应用程序.安装JRE并不重要,只是工作.但...
问题:
像这样的简单批处理文件可用于启动应用程序:
@echo off
start c:\windows\system32\javaw.exe -jar "c:\program files\myapp\myapp.jar" %1
Run Code Online (Sandbox Code Playgroud)
可以为此批处理文件创建快捷方式以设置自定义图标.
问题:
c:\windows\syswow64
,Windows不会自动从批处理文件重定向此调用.使用JAVA_HOME
环境变量也是不可取的,因为Java不会自动设置它.可以仅创建启动应用程序的快捷方式,而不是使用批处理文件.它链接到这个命令:c:\windows\system32\javaw.exe -jar "c:\program files\myapp\myapp.jar"
.如果安装了32位Java JRE,Windows会自动将此调用重定向到SysWOW64目录.
问题:
还有另一种解决方案可以满足上述所有要求吗?或者有没有任何技巧来解决上述解决方案的问题?
使用Launch4j解决任务栏固定问题后,看起来是最好的解决方案.Launch4j可以很容易地集成到Maven项目中(使用这个或这个插件),配置非常简单,除了任务栏固定外,一切都是开箱即用的.对于任务栏固定,Java应用程序必须按照此问题的答案中的说明设置appModelUserId .
此外,Java应用程序必须由安装程序安装,安装程序必须至少安装一个指向EXE的快捷方式.此快捷方式还必须包含appModelUserId.使用NSIS,可以使用WinShell插件 …
我在Spring 4.0.3中使用以下异常处理程序拦截异常并向用户显示自定义错误页面:
@ControllerAdvice
public class ExceptionHandlerController
{
@ExceptionHandler(value = Exception.class)
public ModelAndView handleError(HttpServletRequest request, Exception e)
{
ModelAndView mav = new ModelAndView("/errors/500"));
mav.addObject("exception", e);
return mav;
}
}
Run Code Online (Sandbox Code Playgroud)
但是现在我想要对JSON请求进行不同的处理,以便在发生异常时获得此类请求的JSON错误响应.目前,上述代码也由JSON请求(使用Accept: application/json
标头)触发,JavaScript客户端不喜欢HTML响应.
如何针对HTML和JSON请求以不同方式处理异常?
示例代码:
int a = 255;
byte b = (byte) a;
int c = b & 0xff; // Here be dragons
System.out.println(a);
System.out.println(b);
System.out.println(c);
Run Code Online (Sandbox Code Playgroud)
所以我们从255的整数值开始,将其转换为一个字节(变为-1),然后使用魔术公式将其转换回int.预期的产出是:
255
-1
255
Run Code Online (Sandbox Code Playgroud)
我想知道这a & 0xff
是否是这种转换最优雅的方式.checkstyle例如抱怨在这个地方使用一个幻数,并且忽略这个检查的值不是一个好主意,因为在其他地方255可能真的是一个应该避免的幻数.而且我自己为这样的东西定义常量非常烦人.所以我想知道JRE中是否有一种标准方法来代替这种转换?或者可能是已定义的具有最高无符号字节值的常量(类似于Byte.MAX_VALUE,这是最高的有符号值)
所以要保持简短的问题:如何在不使用幻数的情况下将字节转换为int?
好的,到目前为止提到了以下可能性:
& 0xff
并忽略checkstyle中的幻数255.缺点:其他可能在某些其他范围(不是位操作)中使用此数字的地方也不会被检查.优点:简单易读.& SomeConsts.MAX_UNSIGNED_BYTE_VALUE
.缺点:如果我需要在不同的类中,那么我必须为这个darn常量定义我自己的常量类.优势:这里没有神奇的数字.b & ((1 << Byte.SIZE) - 1)
.编译器输出很可能是相同的,因为它被优化为常量值.缺点:代码相当多,难以阅读.优点:只要1
没有定义为幻数(checkstyle默认忽略它),我们这里没有幻数,我们不需要定义自定义常量.当字节有一天被重新定义为16位(开玩笑)时它仍然有效,因为Byte.SIZE将是16而不是8.还有更多想法吗?也许其他一些聪明的逐位操作比上面的那个短,只使用0和1之类的数字?
我有一个Spring MVC应用程序,它使用FreeMarker作为View技术(但也许视图技术对我的问题并不重要).我需要拦截在请求期间可能抛出的所有异常.
我已经实现了HandlerExceptionResolver,但只有在控制器中发生异常时才会执行此解析程序.但是当控制器返回ModelAndView并且在渲染视图时发生异常(因为找不到变量或类似的东西),则不会调用异常解析器,而是在浏览器窗口中获得堆栈跟踪.
我还尝试在控制器中使用异常处理程序方法,该方法返回视图并使用@ExceptionHandler对其进行注释,但这也不起作用(很可能是因为异常不会在控制器中抛出但在视图中).
那么是否有一些Spring机制可以注册一个捕获视图错误的异常处理程序?
java ×5
spring ×3
spring-mvc ×3
c++ ×2
batch-file ×1
c++11 ×1
freemarker ×1
git ×1
imagemagick ×1
iostream ×1
jackson ×1
launch4j ×1
maven ×1
maven-2 ×1
png ×1
spring-boot ×1
svg ×1
tomcat ×1
windows ×1
winrun4j ×1