小编Tom*_*Tom的帖子

简单的双三次图像插值算法?

大多数插值算法(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像素阵列(又称图像)?

php delphi algorithm interpolation

2
推荐指数
1
解决办法
1097
查看次数

如何在Delphi中将颜色减少到指定的数字?

如何在Delphi中将颜色减少到指定的数字(<= 256)?我不想只使用:

 Bmp.PixelFormat := pf8bit;
Run Code Online (Sandbox Code Playgroud)

因为那样我无法控制颜色数量.我不想要抖动,因为我已经知道如何用256或更少颜色抖动图像.

我发现了这个Median Cut实现,但它从1990年开始是纯粹的Pascal,并且:

  1. 不在Delphi中编译
  2. 说它是共享软件并且花费25 Deutche Marks
  3. 看起来(不知何故)不必要的复杂

我想TBitmap32只减少(Graphics32位图类,仅支持32位颜色)到<= 8bit bmp.我不需要减少到15/16bit,我不需要从24或15/16bit图像减少.只需32位=> 8位 -

Delphi我使用:7,2005,XE3.

delphi colors bitmap quantization reduction

1
推荐指数
1
解决办法
1398
查看次数

从数据列表中选择时,如何检测输入字段?

我有附加datalist的输入:

<input type="text" list="mylist">

<datalist id="mylist">
<option>1
<option>2
</datalist>
Run Code Online (Sandbox Code Playgroud)

当我从列表中选择一个选项时,change事件不会在输入元素上触发.那么如何检测输入的变化呢?

html javascript jquery html5

1
推荐指数
1
解决办法
1561
查看次数

如何将C++ char**翻译为Delphi?

我有一个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)

但我得到的只是"访问违规"

delphi dll

1
推荐指数
1
解决办法
1085
查看次数

从子类调用方法时出现“抽象错误”

我想根据参数实例化类。这两个类都是从 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)

delphi

1
推荐指数
1
解决办法
54
查看次数

线程是冻结的主要形式

我想运行多个线程。每个线程都应该将 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)

delphi multithreading delphi-7

1
推荐指数
1
解决办法
407
查看次数

TBitmap32 作为 DLL 中的函数参数

我想用一些函数创建一个 DLL,以便更容易管理代码、更新程序等。我不希望任何其他编程语言使用我的 DLL,只是 Delphi。

那么在这种情况下,将字符串和对象作为参数传递是否安全?像这样:

function LoadImage(Filename: AnsiString; Bmp32: TBitmap32): Integer;
begin
//
end;
Run Code Online (Sandbox Code Playgroud)

这样的 DLL 可以在不同版本的 Delphi 中正常工作吗?

delphi dll

1
推荐指数
1
解决办法
78
查看次数

用 ZLIB 压缩到字节数组?

我可以使用 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)

delphi zlib delphi-10.3-rio

1
推荐指数
1
解决办法
165
查看次数

如何在Delphi控制台应用程序中运行控制台应用程序?

我希望我的控制台应用程序启动另一个控制台应用程序,显示另一个应用程序想要显示的所有内容,然后在另一个应用程序完成并退出后执 基本上:

Writeln('Started');
ShellExecute(0, 'open', 'another.exe', nil, nil, SW_SHOWNORMAL);
Writeln('Finished');
Run Code Online (Sandbox Code Playgroud)

那么如何在控制台应用程序中显示来自另一个控制台应用程序的所有输出?我不想捕获另一个应用程序的输出.我只想在同一命令行窗口中执行另一个应用程序.

delphi

0
推荐指数
1
解决办法
817
查看次数

使用查找表计算 CRC-6 GSM

我正在尝试计算 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)

delphi pascal crc lazarus

0
推荐指数
1
解决办法
292
查看次数