博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JPEG和Variant的转换
阅读量:4634 次
发布时间:2019-06-09

本文共 2126 字,大约阅读时间需要 7 分钟。

unit Unit1;

interface

uses 

  Windows, Messages, SysUtils, Classes, Graphics, Controls,     
  Forms, Dialogs,jpeg, ExtCtrls, StdCtrls,ActiveX, AxCtrls; 
type 
  TForm1 = class(TForm) 
    Image1: TImage; 
    Button2: TButton; 
    Image2: TImage; 
    procedure Button2Click(Sender: TObject); 
  private 
    procedure StreamToVariant(Stream: TMemoryStream; 
                              var v:  OleVariant); 
    procedure VariantToStream(const v: olevariant; 
                              Stream: TMemoryStream); 
    procedure JPEGToVariant(aJPEG : TJPEGImage; 
                             var aVariant:OleVariant); 
    procedure VariantToJPEG(aValue : OleVariant; 
                             var aJPEG:TJPEGImage); 
    { Private-Deklarationen } 
  public 
    { Public-Deklarationen } 
  end;

var 

  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.VariantToStream (const v : olevariant; Stream : TMemoryStream); 

var 
  p : pointer; 
begin 
  Stream.Position := 0; 
  Stream.Size := VarArrayHighBound (v, 1) - VarArrayLowBound (v, 1) + 1; 
  p := VarArrayLock (v); 
  Stream.Write (p^, Stream.Size); 
  VarArrayUnlock (v); 
  Stream.Position := 0; 
end;

procedure TForm1.StreamToVariant (Stream : TMemoryStream; var v : OleVariant); 

var 
  p : pointer; 
begin 
  v := VarArrayCreate ([0, Stream.Size - 1], varByte); 
  p := VarArrayLock (v); 
  Stream.Position := 0; 
  Stream.Read (p^, Stream.Size); 
  VarArrayUnlock (v); 
end;

procedure TForm1.JPEGToVariant(aJPEG : TJPEGImage; var aVariant:OleVariant); 

var 
  Stream        : TMemoryStream; 
begin 
    try 
      Stream := TMemoryStream.Create;

      aJPEG.Assign(Image1.Picture.Bitmap); 

      aJPEG.SaveToStream(Stream);

      StreamToVariant(Stream, aVariant); 

    finally 
       Stream.Free; 
   end; 
end;

procedure TForm1.VariantToJPEG(aValue : OleVariant;var aJPEG:TJPEGImage); 
var 
   Stream : TMemoryStream; 
begin 
try 
  Stream := TMemoryStream.Create;

  VariantToStream (aValue,Stream); 

  aJPEG.LoadfromStream(Stream);

finally 

   VariantClear(aValue); 
   Stream.free; 
end; 
end;

procedure TForm1.Button2Click(Sender: TObject); 

var 
   aJPEG :TJPEGImage; 
   aVariant : OleVariant; 
begin 
try 
   aJPEG:=TJPEGImage.Create;

   //JPEG To Variant 

   aJPEG.Assign(Image1.Picture.Bitmap); 
   JPEGToVariant(aJPEG,aVariant);

   //Variant To JPEG 
   VariantToJPEG(aVariant,aJPEG); 
   Image2.Picture.assign(aJPEG); 
finally 
   aJPEG.free; 
end; 
end;

end.

转载于:https://www.cnblogs.com/yzryc/p/6374921.html

你可能感兴趣的文章
小程序开发 自定义转发
查看>>
【找回数学的感觉】1 再版汉诺塔等
查看>>
3. Longest Substring Without Repeating Characters
查看>>
我的一亩三分地
查看>>
Java线程和多线程(三)——线程安全和同步
查看>>
武汉小猫科技-工作总结(1):一图胜万言
查看>>
python-冒泡排序
查看>>
斯坦福机器学习视频笔记 Week9 异常检测和高斯混合模型 Anomaly Detection
查看>>
vscode 插件
查看>>
angular 新建组件
查看>>
Python全栈之路系列之面向对象特殊成员
查看>>
Lpms-B2 IMU数据采源码分析 及 TCP/IP握手简单分析
查看>>
Silverlight——ListBox学习笔记
查看>>
JQUERY1.6 方法4 检测浏览器
查看>>
LINUX系统GIT使用教程
查看>>
shell /dev/null
查看>>
docker 镜像
查看>>
OAuth 2.0攻击面与案例总结
查看>>
centos7grub2 引导win10
查看>>
基于DCMTK的DICOM相关程序编写攻略
查看>>