我不得不提出这样一个简单的问题,感到愚蠢,但过去一小时我一直没有运气,无论如何找到解决方案.每个人似乎都需要做与我需要做的完全相反的事情.
我的问题是如何在调整图像大小时告诉mogrify和/或转换为不保持宽高比?对于宽度和高度,我需要图像的精确度为2,图像的比例不是1:1,这意味着一侧必须伸展.
我对答案最接近的是-extent标志,但这只是扩展了画布.我需要原始图像来填充整个事物.
我已经在一个相当大的C++项目上工作了几个星期了.我最初的目标是使用这个项目来学习C++ 11并仅使用纯C++代码并避免手动分配和C构造.但是,我认为这个问题会迫使我用C来做一个小函数,我想知道为什么.
基本上我有一个保存功能,它会在我更改其中的数据之前将一个稍大的二进制文件复制到一个单独的位置.文件本身是CD图像,最大大小约为700MB.这是我使用的原始C++代码:
std::ios::sync_with_stdio(false);
std::ifstream in(infile, std::ios::binary);
std::ofstream out(outfile, std::ios::binary);
std::copy(std::istreambuf_iterator<char>(in), std::istreambuf_iterator<char>(), std::ostreambuf_iterator<char>(out));
out.close();
in.close();
Run Code Online (Sandbox Code Playgroud)
与690MB文件一起使用时,此代码只需不到4分钟即可完成.我用多个文件运行它,它总是相同的结果; 没有3分钟.但是,我还发现以下方式运行得更快一点,但仍然没有C那么快:
std::ios::sync_with_stdio(false);
std::ifstream in(infile, std::ios::binary);
std::ofstream out(outfile, std::ios::binary);
out << in.rdbuf();
out.close();
in.close();
Run Code Online (Sandbox Code Playgroud)
这个花了24秒,但它仍然比C慢约20倍.
环顾四周之后,我发现有人需要写一个80GB的文件并看到他可以使用C全速写入.我决定尝试使用这段代码:
FILE *in = fopen(infile, "rb");
FILE *out = fopen(outfile, "wb");
char buf[1024];
int read = 0;
//  Read data in 1kb chunks and write to output file
while ((read = fread(buf, 1, 1024, in)) == 1024)
{
  fwrite(buf, 1, 1024, out);
}
//  If there is any data left …Run Code Online (Sandbox Code Playgroud) 最近我开始学习管道以获得乐趣.我已经陷入了几个部分,但是我认为它很大程度上已经找到了,但是我无法弄清楚如何获得输入以转发到程序并同时从该程序输出.
目前我有这个处理管道的Perl脚本:
#!/usr/bin/perl
use strict;
use warnings;
use threads;
use FileHandle;
use IPC::Open2;
my $cv_program = "./test"; #test is the compiled C program below
my $cv_message = "";
my $cv_currentkey = "";
my $pid = open2(*PIN, *POUT, $cv_program);
my $thread_pipeout = threads->create('PIPEOUT', \&PIN);
$thread_pipeout->detach();
while($cv_currentkey ne "\n")
{
    $cv_currentkey = getc(STDIN);
    $cv_message .= $cv_currentkey;
}
print POUT $cv_message;
sub PIPEOUT
{
    my $PIN = shift;
    while(<PIN>)
    {
        print $_;
    }
}
Run Code Online (Sandbox Code Playgroud)
然后我有这个C程序只输出一些东西,请求一个字符串,然后打印该字符串:
#include <stdio.h>
int main(int argc, char const *argv[]) …Run Code Online (Sandbox Code Playgroud) 我一直在乱搞Scintilla.NET一两个小时,但我遇到了一个似乎应该很容易解决的问题.我似乎找不到一种方法来改变Scintilla.NET中关键字的实际高亮颜色.据我所见,他们的文件非常缺乏,我在那里找不到任何帮助.我在这里也看到很多问题也没有帮到我.似乎无论我做什么,关键词的亮点总是深蓝色,这在我的表格主题上极难阅读.
到目前为止,我已经将这种XML样式放在一起,并使用C#代码加载样式.我将几个示例中的XML放在一起,C#代码来自他们网站上的一个问题.
<?xml version="1.0" encoding="utf-8"?>
<ScintillaNET>
    <Language Name="65c816 asm">
        <Indentation TabWidth="4"/>
        <Lexer LineCommentPrefix=";" >
            <Keywords List="0" Inherit="False">
            adc adc and asl bcc bcs beq bit bmi bne bpl
            bra brk brl bvc bvs clc cld cli clv cmp cop
            cpx cpy dec dex dey eor inc inx iny jmp jsr
            lda ldx ldy lsr mvn mvp nop ora pea pei per
            pha phb phd phk php phx phy pla plb pld plp
            plx ply rep rol ror rti rtl rts …Run Code Online (Sandbox Code Playgroud) 我一直在尝试在Ruby中读取和编写进程内存,希望将一些旧的C++程序转换为更动态的语言.但是我一直没有轻松过去.我已经做了一些阅读,但我找不到我的具体问题.我可能在下面有一些非常基本的错误,因为我不太确定指针管理在Ruby-ffi中是如何工作的.
无论如何,我目前已经ffi安装了gem并且已经使用它来获取功能.这就是我所拥有的:
module Memory
  PROC_READ = 0x10
  PROC_WRITE = 0x20
  PROC_RW = PROC_READ | PROC_WRITE
  extend FFI::Library
  ffi_lib 'kernel32'
  # HANDLE WINAPI OpenProcess(DWORD, BOOL, DWORD)
  attach_function :open, :OpenProcess, [:uint, :bool, :uint], :pointer
  # BOOL WINAPI CloseHandle(HANDLE)
  attach_function :close, :CloseHandle, [:pointer], :bool
  # BOOL WINAPI ReadProcessMemory(HANDLE, LPCVOID, out LPVOID, SIZE_T, out SIZE_T)
  attach_function :read, :ReadProcessMemory, [:pointer, :pointer, :pointer, :int, :int], :bool
  # BOOL WINAPI WriteProcessMemory(HANDLE, LPCVOID, LPVOID, SIZE_T, out SIZE_T)
  attach_function :write, :WriteProcessMemory, [:pointer, :pointer, :pointer, :int, :int], :bool …Run Code Online (Sandbox Code Playgroud) 我一直在尝试制作一个基本的XOR头文件,以便在将来的程序中使用.到目前为止,我已经完成了几乎所有工作,但我似乎无法使用相同的功能两次.如果我调用该函数来加密它可以工作的字符串,但是如果我再次调用它就会崩溃.我不知道我是在记忆中做错了什么还是遗漏了一些明显的东西.希望有人可以指出这方面的缺陷,因为我似乎找不到任何错误.
编辑:如果发布这么多太多,请随意修剪代码.我已经拿出了相当多的东西,所以我不只是粘贴我的项目并希望有人修复它.
// Main.c
#define MAX_LENGTH 255
#define KEY_SIZE 8
int main(int argc, char *argv[]) {
    //Get String to XOR
    char *input = malloc (MAX_LENGTH);
    printf("Enter a string to encrypt: ");
    fgets(input, MAX_LENGTH, stdin);
    if(input[strlen (input) - 1] == '\n') {
        input[strlen (input) - 1] = '\0';
    }
    //Create a random key
    char *pass = _create_key(KEY_SIZE);
    int len = strlen (input);
    printf("Length of key is %d\n", KEY_SIZE);
    printf("Entered String: %s - Password: %s\n", input, pass);
    //Encrypt works fine
    char *encrypted …Run Code Online (Sandbox Code Playgroud) 我有一个主窗口,有一个TEdit和一个TButton我需要把手.他们都在TPanel里面.到目前为止我的代码是
    public void SendPacket(string packet)
    {
        IntPtr hWnd = Window.FindWindow(null, "AlissaAnalyzer");
        IntPtr panel = Window.FindWindowEx(hWnd, IntPtr.Zero, "TPanel", "");
        IntPtr edithWnd = Window.FindWindowEx(panel, IntPtr.Zero, "TEdit", "");
        IntPtr buttonhWnd = Window.FindWindowEx(panel, IntPtr.Zero, "TButton", "");
        //Do stuff with handles
    }
Run Code Online (Sandbox Code Playgroud)
这给了我TPanel和TButton的句柄,但TEdit为0.我不知道为什么这不起作用,因为它遵循Spy ++给我的结构:

这里有什么我想念的吗?我是否需要一种不同的方法来获取TEdit的句柄?我使用FindWindowEx错了吗?
我一直在努力让CodeDom工作,所以我可以在运行时为我的应用程序动态创建代码.然而,经过许多教程和反复试验,我遇到了一个我似乎无法通过的问题.我一直在代码看起来完全像应该编译错误.当我的代码中没有'\'时,我得到"无法识别的转义序列'\'".
我得到的错误都在第1行.这里它们是有序的:CS1009 CS1056(连续3次)CS0116
这是我有的:
正在编译的代码:
using System;
using System.Windows.Forms;
namespace sdjkfhj 
{    
    public class Sample 
    {
        public static void main()
        {
            MessageBox.Show("Working");
            return;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)
编译器代码如下:
public void Compile(string file)
    {
        var prov = new Dictionary<string, string>();
        prov.Add("CompilerVersion", "v2.0");
        CSharpCodeProvider c = new CSharpCodeProvider();
        ICodeCompiler comp = c.CreateCompiler();
        CompilerParameters param = new CompilerParameters();
        param.GenerateExecutable = true;
        param.OutputAssembly = file + ".exe";
        param.ReferencedAssemblies.Add("System.dll");
        param.ReferencedAssemblies.Add("System.Windows.Forms.dll");
        if (c.Supports(GeneratorSupport.EntryPointMethod))
            param.MainClass = "Sample";
        CompilerResults results = comp.CompileAssemblyFromSource(param, file);
        if (results.Errors.Count > 0)
        {
            foreach …Run Code Online (Sandbox Code Playgroud) 我在Visual C++中使用内联汇编,并且已经尝试了几天以获得int 21h以使用我的程序.其他中断工作(int 3)让我相信要么我21h错误或者某种方式被阻止.我使用int 21h时只会遇到运行时错误.如果我评论它可以移动寄存器罚款.
到目前为止,我已经将它们结合在了一起:
int _tmain(int argc, _TCHAR* argv[])
{
    __asm {
        mov ah, 1h
        int 21h
        mov dl, al
        mov ah, 2h
        int 21h
    }
}
Run Code Online (Sandbox Code Playgroud) 过去几天我一直在研究一个涉及阅读大文件的项目.具体而言,它逐行读取它们以解析数据以插入数据库.
在对这些文件运行测试时,我发现对于一个400MB的文件,Ruby分配了超过1.2GB的内存; 大约是文件自身数量的3倍.更令人不安的是,一旦记忆被记录下来,Ruby就不想让大部分内存消失了.手动运行GC只能恢复大约三分之一的内存,意味着分成行的400MB文件占用超过800MB的内存.
这真让我感到困惑,我想知道是否有什么我做错了.这是我的代码复制问题:
text = File.read("somefile.txt").split("\n")
Run Code Online (Sandbox Code Playgroud)
我没有看到数组中的行如何在内存中加倍.
在另一种情况下,填充一个包含1000万个字符的数组会导致每1字节数据的内存比例达到40字节,尽管我已经准备好将其计入字符串元数据.
作为参考,我在Windows 8上使用Ruby 2.1.5p273 [i386-mingw32].
此外,在我得到答案之前告诉我以另一种方式阅读线路:我已经知道一些替代方案.这只是关于内存消耗的问题.