var 
  MyJpeg: TJpegImage;
  Bmp: TBitmap;
begin
   Bmp:= TBitmap.Create;
   MyJpeg:= TJpegImage.Create;
   Bmp.LoadFromFile('c:\2.bmp');
   Bmp.PixelFormat := pf24Bit;
   Bmp.Canvas.StretchDraw(Rect(0,0,Bmp.Width,Bmp.Height), image1.Picture.Graphic);
   MyJpeg.Assign(Bmp);
   MyJpeg.CompressionQuality := 50;
   MyJpeg.Compress;
   MyJpeg.SaveToFile('C:\2.jpg');
   MyJpeg.free;
   Bmp.free;
我要的不是像这样的代码!!!

解决方案 »

  1.   

    怎么没人碰到过类似的问题吗?
    在delphi7下面用image控件显示不出来256色的图片,请问有什么解决办法吗?
      

  2.   

    “在delphi7下面用image控件显示不出来256色的图片”——这是谁告诉你的?你上面给出的代码中, 根本没有在可视化组件中显示图片的代码,怎么可能会显示出图片来呢?下面这一句不就可以显示出256色(其实是任意色彩数)的BMP了吗?
    Image1.Picture.LoadFromFile('c:\2.bmp');
      

  3.   

    你到底是想知道"如何用Image组件来显示256色位图", 还是想知道"如何将256色位图转换为Jpeg格式"?
      

  4.   

    就是在delphi7中,如何显示256色的位图,不管用什么方法都行!!!
      

  5.   

    那就是下面这一句话:
    Image1.Picture.LoadFromFile('c:\2.bmp');
      

  6.   

    不行的,要真能显示,代码都不用,直接改picture显示,找到文件位置,如果是24位的位图文件,就能正常显示,如果是256色的,大部出现的是黑色
      

  7.   

    从来就没见过,d6,d7都是这样用,根本就没有你说的问题,除非不是bmp
      

  8.   

    是256色的bmp文件,要不你加我QQ,我传给你
      

  9.   

    256色的bmp文件, 咱们不缺,用"画图"程序另存一下,要几个有几个。
      

  10.   

    新建一个bmp文件,再另存为256色的bmp文件,我这里显示也没有问题啊,可问题是我们经理给我的那几张bmp文件显示就是有问题,用windows的画图工具显示是没问题的,这就奇了,怪了,不信我把那张图发你邮箱吧!!!救命啊,小姐
      

  11.   

    可能不是bmp
    [email protected]
      

  12.   

    图片我己发到你邮箱了,是BMP的文件,麻烦了
      

  13.   

    估计LZ的图片格式是gif,2006和2007支持gif格式,而D7不支持,所以“,在delphi2006/2007里面,是可以用image控件,不用做任何处理就能直接显示256色位图文件的”
      

  14.   

    问题已经自己用windows API解决了,下面是源代码(不是gif图片):
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, FileCtrl, StdCtrls, ExtCtrls;type
      TForm1 = class(TForm)
        DriveComboBox1: TDriveComboBox;
        DirectoryListBox1: TDirectoryListBox;
        FileListBox1: TFileListBox;
        Image1: TImage;
        Image2: TImage;
        procedure FileListBox1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FileListBox1Click(Sender: TObject);
    var
      TheBitmap: THandle;            // holds a newly loaded bitmap image
      BitmapInfo: Windows.TBitmap;   // holds the bitmap information
      TheOffscreenDC: HDC;           // holds a handle to a memory device context
      w,h: integer;
    begin
      self.Image2.Picture.Bitmap:=nil;  TheOffscreenDC := CreateCompatibleDC(0);  self.DoubleBuffered := true;
      self.Image1.Picture.Bitmap.LoadFromFile(FileListBox1.FileName);
      image1.Picture.Bitmap.PixelFormat := pf32bit;
      w := image1.Picture.Bitmap.Width;
      h := image1.Picture.Bitmap.Height;  TheBitmap := LoadImage(0,PChar(FileListBox1.FileName),IMAGE_BITMAP,0,0,
                             LR_LOADFROMFILE);  GetObject(TheBitmap, SizeOf(Windows.TBitmap), @BitmapInfo);  SelectObject(TheOffscreenDC, TheBitmap);  StretchBlt(Image2.Canvas.Handle,0,0,Image1.Picture.Bitmap.Width,Image1.Picture.Bitmap.Height,TheOffscreenDC,
                 0,0,Image1.Picture.Bitmap.Width,Image1.Picture.Bitmap.Height,SRCCOPY);  Image1.Refresh;
      Image2.Refresh;  DeleteDC(TheOffscreenDC);
      DeleteObject(TheBitmap);
    end;
    end.
    {
    Function StretchBlt Lib "gdi32" Alias "StretchBlt" (ByVal hdc As Long, ByVal x As Long, 
    ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, 
    ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long 
    说明 
    将一幅位图从一个设备场景复制到另一个。源和目标DC相互间必须兼容。这个函数会在设备场景中定义一个目标矩形,
    并在位图中定义一个源图象。源矩形会根据需要进行伸缩,以便与目标矩形的大小相符 
    返回值 
    Long,非零表示成功,零表示失败。会设置GetLastError 
    参数表 
    参数 类型及说明 
    hdc Long,目标设备场景 
    x,y Long,目标矩形左上角的x,y坐标,以逻辑坐标表示 
    nWidth,nHeight Long,目标矩形的宽度和高度,以逻辑坐标表示 
    hSrcDC Long,源设备场景。如光栅运算未指定一个源,则这个参数应为零 
    xSrc,ySrc Long,用源DC的逻辑坐标表示的源矩形左上角位置 
    nSrcWidth,nSrcHeight Long,分别指定用逻辑单位(以源DC为基础)传输的一幅图象的宽度和高度。
    如其中有一个参数的符号(指正负号)与对应的目标参数不符,位图就会在对应的轴上作镜像转换处理 
    dwRop Long,传输过程中进行的光栅运算。如刷子属于光栅运算的一部分,就使用选入目标DC的刷子 }