小编gus*_*gbc的帖子

如何在Delphi 2010中更改TWICImage的pixelformat

我有一个TWICImage,IWicBitmap和一个IWicBitmapSource,可以很好地显示所有支持的图形文件格式,允许旋转,水平翻转,垂直翻转,缩放和剪切.所有这些似乎都运行良好,我可以得到WicImages像素格式,但我无法弄清楚如何更改或设置TWICImage的pixelformat.

我创建了一个对话框来返回WICPixelFormatGUID以用作转换的pixelformat.

任何人都可以共享一些代码,演示如何使用IWICColorTransform或其他Wincodec方法更改WicImage的pixelformat?

法案

它现在到2011年中期......所以对于那些可能想知道的人我试过这个并且它似乎有用(它使用Developer Express的TcxImage,但我怀疑TImage也能正常工作):

procedure TForm1.N16bitBGR1Click( Sender: TObject );
var
  wicImg: TWICImage;
  wicBitmap: IWICBitmap;
  iBmpSource: IWICBitmapSource;
  puiWidth, puiHeight: UINT;
  iConverter: IWICFormatConverter;
begin
  if cxImage1.Picture.Graphic is TWICImage then
  begin
    Screen.Cursor := crHourGlass;
    try
      wicImg := TWICImage( cxImage1.Picture.Graphic );
      wicImg.ImagingFactory.CreateFormatConverter( iConverter );
      iBmpSource := wicImg.Handle as IWICBitmapSource;
      iBmpSource.GetSize( puiWidth, puiHeight );
      iConverter.Initialize( iBmpSource, GUID_WICPixelFormat16bppBGR555, WICBitmapDitherTypeNone, nil, 0,
        WICBitmapPaletteTypeMedianCut );
      wicImg.ImagingFactory.CreateBitmapFromSourceRect( iConverter, 0, 0, puiWidth, puiHeight, wicBitmap );
      if Assigned( wicBitmap ) then
        wicImg.Handle := wicBitmap;
      cxImage1.Repaint;
      cxImage1.Update;
      cxImage1.Invalidate;
      dxStatusBar1.Panels[ 0 …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-2010

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

使用Delphi XE2在MacOS应用程序中嵌入Web浏览器

如何在Delphi MacOS应用程序中嵌入WebView(嵌入式Web浏览器)?

它似乎没有出现Webkit标头包含在XE2中.

delphi macos webkit delphi-xe2

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

如何使用Synapse TMimeMess减少解码MIME时的大量RAM使用?

我使用TMimeMess来解码基于Synapse的SMTP服务器的传入电子邮件.

我发现,为了解码50MB MIME消息(带附件的简单文本),TMimeMess使用了600-800MB的内存.

在这里解码代码:

FMimeMsg.Header.DecodeHeaders(FMimeMsg.MessagePart.Lines);
FMimeMsg.MessagePart.DecomposeParts;
ExtractPartsFromMess(FMimeMsg.MessagePart);
...
procedure ExtractPartsFromMess(AMimePart: TMimePart);
var i: integer;
begin
  if AMimePart.GetSubPartCount = 0 then
    Begin
      if (AMimePart.PrimaryCode = MP_TEXT) then
        Begin
          AMimePart.DecodePart;          
          FBody.Add(string(ReadStrFromStream(AMimePart.DecodedLines,AMimePart.DecodedLines.Size)));
    end
  else if (AMimePart.PrimaryCode = MP_BINARY) then
    Begin
      if AMimePart.FileName <> '' then
        Begin
          AMimePart.DecodePart;
          AMimePart.DecodedLines.SaveToFile(FPathToIncomingFolder+AMimePart.FileName);
        end;
    end;
end
else
Begin
  for i:=0 to AMimePart.GetSubPartCount-1 do
    Begin
      ExtractPartsFromMess(AMimePart.GetSubPart(i));
    end;
end;
end;
Run Code Online (Sandbox Code Playgroud)

谢谢.

memory delphi mime smtp

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

如何清除"运行" - >"参数"菜单中的"参数"字段?

我正在使用CodeGear RAD Studio IDE.

为了使用命令行参数测试我的应用程序,我在"运行 - >参数"菜单中使用了几次"参数"字段.

但每次我提供新值时,都无法从"下拉框"中删除它.

我需要清理这个字段(擦除所有值),因为在某些情况下有关于它们的信息,我不想与偶尔可能使用我的机器的人分享.

我该如何清理这个字段?

ide delphi delphi-2007

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

Gradle 同步失败:原因:com/android/build/gradle/BaseExtension

我从github下载了一个项目,然后尝试构建它。

但是,一旦 Gradle 运行,Android Studio (2.3.3) 的事件日志向我展示了这一点:

Gradle sync failed: Cause: com/android/build/gradle/BaseExtension
Consult IDE log for more details (Help | Show Log)
Run Code Online (Sandbox Code Playgroud)

并且

Error:(18, 0) com/android/build/gradle/BaseExtension
<a href="openFile:C:\Users\Gustavo\AndroidStudioProjects\simpletask-android\app\build.gradle">Open File</a>
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

Gradle 似乎在正确的位置找不到 Kotlin,但我不知道如何改变这一点。

Kotlin 已安装并更新(至 1.1.3 版)。

在此处输入图片说明

它还被配置为项目中“app”模块的依赖项。

在此处输入图片说明

但是,如最后一张图片所示,项目看到的外部库版本是 1.0.6 而不是 1.1.3。

在此处输入图片说明

这是问题吗?如何更改此外部库?

android kotlin android-studio android-gradle-plugin

6
推荐指数
2
解决办法
3128
查看次数

如何在XE2中中止TSQLConnection连接尝试?

使用Delphi XE2中的TSQLConnection组件连接到DataSnap服务器.

我的问题是,如果我们在3秒后无法连接,我想中止连接尝试,但是设置驱动程序的ConnectTimeout属性似乎没有任何影响(它在放弃之前仍然等待大约20秒) .

我在一个线程中运行它,所以我可以向线程发布一条消息(线程消息队列是否被服务取决于我认为这个阻塞调用是如何创建的).即使我的线程消息处理程序运行,我也不确定如何中断阻塞调用以设置TSQLConnection.Connected属性(在线程的Execute方法中设置).

我不想调用TerminateThread,因为这似乎有点过分,并且会留下(如果我理解的话)分配给线程堆栈的内存.有关如何中断此连接过程,或访问基础Indy组件并明确设置连接超时的任何想法将不胜感激.

谢谢!

fConnection := TSQLConnection.Create(nil);
with fConnection do
begin
  DriverName := 'DataSnap';
  Params.Values['CommunicationProtocol'] := 'tcp/ip';
  Params.Values['DatasnapContext'] := 'datasnap/';
  Params.Values['HostName'] := '127.0.0.1';
  Params.Values['Port'] := '211';
  Params.Values['ConnectTimeout'] := '3000';
  KeepConnection := true;
  LoginPrompt := true;
end;

// Where it blocks for up to 20 seconds (if host unavailable)
fConnection.Connected := True;
Run Code Online (Sandbox Code Playgroud)

delphi multithreading client-server delphi-xe2

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

如何在多线程程序中一次只在一个线程中保存Visual Studio调试器?

在多线程应用程序中,当我创建多个线程时,如果它们保持睡眠和唤醒,如何只将调试器保留在其中一个中?我正在使用C#.

补充:我的应用程序需要创建一些线程来控制,每个线程都有自己的(简化)硬件设备.

每个都从其设备返回一些数据,它会影响另一个线程.

要检查一个单独的线程是否正常工作,我需要"冻结"一个并在特定时刻检查它是否会"伤害"其他线程.

c# debugging multithreading visual-studio

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