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. Linux如何用yum安装软件或服务

    百度百科: Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器.基于RPM包管理,能够从指定的服 ...

  2. 【python】实例-python实现两个字符串中最大的公共子串

    由于python中的for循环不像C++这么灵活,因此该用枚举法实现该算法: C="abcdefhe" D="cdefghe" m=0 n=len(C) E=[ ...

  3. PHP与MySqli

    一:链接数据库: $mysqli=@new mysqli("localhost","root","123456","msqldb& ...

  4. <<APUE>> 线程

    一个进程在同一时刻只能做一件事情,线程可以把程序设计成在同一时刻能够做多件事情,每个线程处理各自独立的任务.线程包括了表示进程内执行环境必需的信息,包括进程中标识线程的线程ID.一组寄存器值.栈.调度 ...

  5. sql server 2008数据库 降为 sql server 2005数据库 最终方案总结

    由于xx原因,sql server 要降级,所以有了下文.... 一 直接 通过sql server 自带工具 生成脚本即可,具体操作方法如下: 1.打开 Microsoft Sql Server M ...

  6. 一个多maven项目聚合的实例

    本文转载自:http://my.oschina.net/xuqiang/blog/99854 本文介绍一个多maven项目的实例demo,展示了聚合.继承.工程依赖.单元测试.多war聚合.cargo ...

  7. 导入wordpress数据库到mysql报错

    mysql字符集编码错误的导入数据会提示错误了,这个和插入数据一样如果保存的数据与mysql编码不一样那么肯定会出现导入乱码或插入数据丢失的问题,下面我们一起来看一个例子. 恢复数据库报错:由于字符集 ...

  8. JVM内存监视手段和内存溢出解决方案

    引言 本文仅关注一些常见的虚拟机内存监视手段,以及JVM运行时数据区各个部分内存溢出的发生和对应的解决方案,总体来说属于概括性总结,涉及相对不是很深入,目的是让自己和其它初学者有一个框架性.概念性的了 ...

  9. bzoj4693: 雪中送温暖

    Description 每年的1月10日是温暖节,在这一天,化身出题人的C_SUNSHINE将会给OIer们送温暖.OIer们只要在门口放上一个 仙人掌,就能在早上的某个时刻听到门外传来一声:“开门, ...

  10. bzoj1085 骑士精神

    Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位.在任何时候一个骑士都能按照骑士的走法(它可以走到和它横坐标相差为1,纵坐标相差为2或者横坐标相差为2, ...