首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >KOL PBitmap to PJpeg

KOL PBitmap to PJpeg
EN

Stack Overflow用户
提问于 2012-05-19 08:05:24
回答 1查看 239关注 0票数 0

我正在使用带有KOL组件和JPegObj的Delphi7。如何将PBitmap传输到PJpeg?

代码语言:javascript
复制
var 
 MyBitmap : PBitMap;
 MyJpeg   : PJpeg;
begin
 MyBitMap := ....;
 MyJPeg.Bitmap.Assign (MyBitMap); // ===> Wrong?
 MyJPeg.SaveToFile ('C:\test.jpg');
end;

谢谢你的帮助。

编辑:图片在这里:

编辑:我的代码:

代码语言:javascript
复制
program Project2;

{$APPTYPE CONSOLE}

uses
 Kol,
 JpegObj;

var
 Jpeg: PJpeg;
 Bitmap: PBitmap;

begin
 Bitmap := NewBitmap(50, 50);
 try
  Bitmap.Canvas.Brush.Color := $0000FF80;
  Bitmap.Canvas.Ellipse(0, 0, 50, 50);
  Jpeg := NewJpeg;
  try
   Jpeg.Bitmap := Bitmap;
   Jpeg.SaveToFile('test.jpg');
  finally
   Jpeg.Free;
  end;
 finally
 Bitmap.Free;
end;

0041128E处的运行时错误216

编辑:我在JpegObj中取消了对该行的注释:

代码语言:javascript
复制
 {$DEFINE VER62} // if you plan to use .obj-files from Delphi7 distributive only!

现在程序被冻结了。

编辑:程序在JpegObj中冻结

代码语言:javascript
复制
function __ftol: Integer;
 var
  f: double;
begin
 asm
  lea    eax, f             //  BC++ passes floats on the FPU stack
  fstp  qword ptr [eax]     //  Delphi passes floats on the CPU stack
 end;
 Result := Integer(Trunc(f));
end;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-19 08:43:15

免责声明:以下内容已在Delphi2009!上进行了测试

您不能在PJpeg实例上使用PJpeg.Bitmap.Assign,因为在您访问它的时候,PJpeg.Bitmap是空的,因为它不是在PJpeg构造函数中实例化的,在您使用该实例时也没有实例化。因此,尝试使用PJpeg.Bitmap会导致访问冲突。

尝试这样分配位图(它基于JpegObj扩展中的示例):

代码语言:javascript
复制
var 
  MyJpeg: PJpeg;
  MyBitmap: PBitmap;
begin
  // the MyBitMap has a picture assigned here
  MyJpeg := NewJpeg;
  try
    MyJpeg.Bitmap := MyBitmap;
    MyJpeg.SaveToFile('c:\test.jpg');
  finally
    MyJpeg.Free;
  end;
end;

这是一个VCL极简主义的演示:

代码语言:javascript
复制
uses
  KOL, JPEGObj;

procedure TForm1.Button1Click(Sender: TObject);
var
  Jpeg: PJpeg;
  Bitmap: PBitmap;
begin
  Bitmap := NewBitmap(50, 50);
  try
    Bitmap.Canvas.Brush.Color := $0000FF80;
    Bitmap.Canvas.Ellipse(0, 0, 50, 50);
    Jpeg := NewJpeg;
    try
      Jpeg.Bitmap := Bitmap;
      Jpeg.SaveToFile('c:\image.jpg');
    finally
      Jpeg.Free;
    end;
  finally
    Bitmap.Free;
  end;
end;

令人惊叹的结果是:-)

这是另一个简约的控制台演示:

代码语言:javascript
复制
program Console;

{$APPTYPE CONSOLE}

uses
  SysUtils, KOL, JPEGObj;

var
  Jpeg: PJpeg;
  Bitmap: PBitmap;    
begin
  try
    Bitmap := NewBitmap(50, 50);
    try
      Bitmap.Canvas.Brush.Color := $0000CCFF;
      Bitmap.Canvas.Ellipse(0, 0, 50, 50);
      Jpeg := NewJpeg;
      try
        Jpeg.Bitmap := Bitmap;
        Jpeg.SaveToFile('c:\image.jpg');
      finally
        Jpeg.Free;
      end;
    finally
      Bitmap.Free;
    end;
  except
    on E:Exception do
      Writeln(E.Classname, ': ', E.Message);
  end;
end.

令人兴奋的结果是:-)

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10661203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档