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.

JPEG和Variant的转换的更多相关文章

  1. opencv IplImage各参数详细介绍以及如何从一个JPEG图像数据指针转换得到IplImage

    这篇文章里介绍得最清楚了.http://blog.chinaunix.net/uid-22682903-id-1771421.html 关于颜色空间  RGB颜色空间已经非常熟悉了.HSV颜色空间需要 ...

  2. CString VariantToString(VARIANT var);转换

    Variant类型转换成CString代码 对数据库的操作常常会用Variant和_bstr_t类型,在进行MFC等程序中,通常会用到CString类.从variant转换成CString代码如下:v ...

  3. 文件和Variant的转换

    function FileToVariant(FileName: String): OleVariant; var   AStream: TFileStream;   MyBuffer: Pointe ...

  4. 流和Variant的转换

    procedure TForm2.VariantToStream (const v : olevariant;                                   Stream : T ...

  5. bmp和Variant的转换

    procedure TForm2.VariantToBMP(aValue : OleVariant;var aBmp:TBitmap); var    Stream : TMemoryStream;  ...

  6. 渐进式jpeg(progressive jpeg)图片及其相关 --图片的两种加载方式

    渐进式jpeg(progressive jpeg)图片及其相关   一.基本JPEG(baseline jpeg)和渐进JPEG 网络上那些色色的照片都是.jpg格式的("色色"指 ...

  7. 使用textutil进行文件格式转换

    Typorahtml, body {overflow-x: initial !important;}.CodeMirror { height: auto; } .CodeMirror-scroll { ...

  8. 【转】C#使用ESC指令控制POS打印机打印小票

    .前言 C#打印小票可以与普通打印机一样,调用PrintDocument实现.也可以发送标注你的ESC指令实现.由于 调用PrintDocument类时,无法操作使用串口或TCP/IP接口连接的pos ...

  9. Word,PDF,PPT,TXT之间的转换方法

    来源: 刘波的日志 一.把PPT转WORD形式的方法 1.利用"大纲"视图 打开PPT演示文稿,单击"大纲",在左侧"幻灯片/大纲”任务窗格的“大纲” ...

随机推荐

  1. PHP常用函数总结(二):

    //=================图像处理=================================== //=================会话机制================== ...

  2. ALGO-5_蓝桥杯_算法训练_最短路

    记: 一开始没接触过关于最短距离的算法,便开始翻阅关于图的知识, 得知关于最短距离的算法有Dijkstra算法(堆优化暂未看懂),Bellman-Ford算法,Floyd算法,SPFA算法. 由于数据 ...

  3. python使用smtplib发送邮件

    python要实现发送邮件的功能,需要使用smtplib库. 1. 过程大致如下: 1. 建立和SMTP邮件服务器的连接 # 默认端口25 smtp = smtplib.SMTP(host, port ...

  4. sklearn 线性模型使用入门

    LinearRegression fits a linear model with coefficients  to minimize the residual sum of squares betw ...

  5. 超链接中 utm_source, utm_medium 等参数的含义是什么?

    作者:张溪梦 Simon链接:https://www.zhihu.com/question/48724061/answer/122730629来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非 ...

  6. JNDI的学习与使用

    JNDI(Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API.命名服务将名称和对象联系起来,使得我们可以用 ...

  7. ASP.NET基于Redis的Provider库

    因为session基于本地cache,以前我们自己写分布式缓存,或者数据库存储,或者cookie加密存储,来保存用户状态信息,但较少的直接通过创建一个继承 SessionStateStoreProvi ...

  8. vmware 共享文件夹(win10下的vmware安装了centos7)

    最近研究下了docker.我的笔记本是win10系统,就尝试使用了 win10的hyper-v虚拟化技术,总是感觉占用系统较多,于是换成了vmware,在虚拟机中安装 docker容器服务. 考虑到开 ...

  9. python之路_函数实例及装饰器介绍

    一.习题讲解 1.写函数,返回一个扑克牌列表,里面有52项,每一项是一个元组.例如:[(‘红心’,2), (‘草花’,2), …(‘黑桃,‘A’)] def cards(): num=[] for v ...

  10. mysql更新(四) 数据类型

    07-数据类型   介绍 存储引擎决定了表的类型,而表内存放的数据也要有不同的类型,每种数据类型都有自己的宽度,但宽度是可选的 详细参考链接:http://www.runoob.com/mysql/m ...