大多数插值算法(Lanczos,Hermite,Bicubic)使用非常简单的函数来计算某些值.但是这些值然后通过一些非常复杂的函数发送,这些函数做了一些魔术并且调整了图像的大小.我想了解这个神奇的功能(窗函数?),但大多数代码我在Delphi中,帕斯卡,PHP或简单的C++已经被优化过或一些大库的一部分,并使用吨子功能,类和其他东西的发现.我只想了解基础知识.
例如,Delphi中"最近邻居"的功能是:
function BoxFilter(Value: Single): Single;
begin
if (Value > -0.5) and (Value <= 0.5) then
Result := 1.0
else
Result := 0.0;
end;
Run Code Online (Sandbox Code Playgroud)
如何将这样的函数应用于我的2D像素阵列(又称图像)?
如何在Delphi中将颜色减少到指定的数字(<= 256)?我不想只使用:
Bmp.PixelFormat := pf8bit;
Run Code Online (Sandbox Code Playgroud)
因为那样我无法控制颜色数量.我不想要抖动,因为我已经知道如何用256或更少颜色抖动图像.
我发现了这个Median Cut实现,但它从1990年开始是纯粹的Pascal,并且:
我想TBitmap32只减少(Graphics32位图类,仅支持32位颜色)到<= 8bit bmp.我不需要减少到15/16bit,我不需要从24或15/16bit图像减少.只需32位=> 8位 -
Delphi我使用:7,2005,XE3.
我有附加datalist的输入:
<input type="text" list="mylist">
<datalist id="mylist">
<option>1
<option>2
</datalist>
Run Code Online (Sandbox Code Playgroud)
当我从列表中选择一个选项时,change事件不会在输入元素上触发.那么如何检测输入的变化呢?
我有一个C++ DLL:
int __stdcall Hello(int numFiles, char **inFiles)
Run Code Online (Sandbox Code Playgroud)
我不知道如何翻译这个字符**.我试过了:
function Hello(numFiles: Integer; InFiles: PPChar): Integer; stdcall; external 'dll2.dll';
Run Code Online (Sandbox Code Playgroud)
然后:
Files: array of PChar;
begin
SetLength(Files, 2);
Files[0] := PChar('siema.jpg');
Files[1] := PChar('siema2.jpg');
c := Hello(2, @Files[0]);
Run Code Online (Sandbox Code Playgroud)
但我得到的只是"访问违规"
我想根据参数实例化类。这两个类都是从 TSample 派生的,所以我将我的代码定义为:
var T: TSample;
Run Code Online (Sandbox Code Playgroud)
然后我做
T := TMySample.Create;
Run Code Online (Sandbox Code Playgroud)
或者
T := TYourSample.Create;
Run Code Online (Sandbox Code Playgroud)
并调用T.Hello给出了“抽象错误”。
type TSample = class
public
procedure Hello; virtual; abstract;
end;
TMySample = class(TSample)
public
procedure Hello;
end;
TYourSample = class(TSample)
public
procedure Hello;
end;
...
procedure TForm1.Button1Click(Sender: TObject);
var T: TSample;
a: Integer;
begin
if a = 1 then T := TMySample.Create
else T := TYourSample.Create;
T.Hello; //Abstract Error here
T.Free;
end;
procedure TMySample.Hello;
begin
showmessage('My');
end;
procedure TYourSample.Hello;
begin
showmessage('Your');
end;
Run Code Online (Sandbox Code Playgroud) 我想运行多个线程。每个线程都应该将 JPEG 转换为位图。转换有效,但我的整个应用程序始终使用 12%-13% 的 CPU。我有一个 8 核 CPU,所以整个应用程序似乎只使用一个核。此外,当线程正在工作时,主窗体被冻结并且没有响应。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms, Jpeg, Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
Str: TMemoryStream;
procedure OnTerminate(Sender: TObject);
end;
TMakeThumbThread= class(TThread)
private
FStream: TStream;
public
FBmp: TBitmap;
constructor Create(Str: TStream);
procedure Execute; override;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
constructor TMakeThumbThread.Create(Str: TStream);
begin
inherited Create(True);
FStream := Str;
FreeOnTerminate …Run Code Online (Sandbox Code Playgroud) 我想用一些函数创建一个 DLL,以便更容易管理代码、更新程序等。我不希望任何其他编程语言使用我的 DLL,只是 Delphi。
那么在这种情况下,将字符串和对象作为参数传递是否安全?像这样:
function LoadImage(Filename: AnsiString; Bmp32: TBitmap32): Integer;
begin
//
end;
Run Code Online (Sandbox Code Playgroud)
这样的 DLL 可以在不同版本的 Delphi 中正常工作吗?
我可以使用 ZLIB(使用 ZLIB 标头进行压缩)以某种方式使用 Delphi 进行压缩并获得一个字节数组吗?
现在我正在从 TMemoryStream 复制,但最好不要复制回数组(因此整体速度更快)
PackedStream := TMemoryStream.Create;
ZLib := TZCompressionStream.Create(PackedStream);
ZLib.WriteBuffer(UnpackedArray[0], UnpackedArrayLen);
ZLib.Free;
PackedArrayLen := PackedStream.Size;
SetLength(PackedArray, PackedArrayLen);
PackedStream.Position := 0;
PackedStream.Read(PackedArray[0], PackedArrayLen);
PackedStream.Free;
Run Code Online (Sandbox Code Playgroud) 我希望我的控制台应用程序启动另一个控制台应用程序,显示另一个应用程序想要显示的所有内容,然后在另一个应用程序完成并退出后执 基本上:
Writeln('Started');
ShellExecute(0, 'open', 'another.exe', nil, nil, SW_SHOWNORMAL);
Writeln('Finished');
Run Code Online (Sandbox Code Playgroud)
那么如何在控制台应用程序中显示来自另一个控制台应用程序的所有输出?我不想捕获另一个应用程序的输出.我只想在同一命令行窗口中执行另一个应用程序.
我正在尝试计算 CRC-6 GSM,但结果是错误的(16 美元)。对于“123456789”,根据 https://reveng.sourceforge.io/crc-catalogue/all.htm#crc.cat.crc-6-gsm ,它应该返回 13 美元
var Table: array[0..255] of Byte = (
$3F, $10, $0E, $21, $32, $1D, $03, $2C,
$25, $0A, $14, $3B, $28, $07, $19, $36,
$0B, $24, $3A, $15, $06, $29, $37, $18,
$11, $3E, $20, $0F, $1C, $33, $2D, $02,
$38, $17, $09, $26, $35, $1A, $04, $2B,
$22, $0D, $13, $3C, $2F, $00, $1E, $31,
$0C, $23, $3D, $12, $01, $2E, $30, $1F,
$16, $39, $27, $08, $1B, $34, $2A, $05,
$31, …Run Code Online (Sandbox Code Playgroud)