请问在delphi7下面,如何显示256色的位图文件(bmp)

zj420482596 2007-06-25 09:45:46
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;
我要的不是像这样的代码!!!
...全文
352 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
zj420482596 2007-06-29
  • 打赏
  • 举报
回复
问题已经自己用windows API解决了,下面是源代码(不是gif图片):
unit Unit1;

interface

uses
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的刷子

}
阿发伯 2007-06-29
  • 打赏
  • 举报
回复
估计LZ的图片格式是gif,2006和2007支持gif格式,而D7不支持,所以“,在delphi2006/2007里面,是可以用image控件,不用做任何处理就能直接显示256色位图文件的”
zj420482596 2007-06-26
  • 打赏
  • 举报
回复
是256色的bmp文件,要不你加我QQ,我传给你
constantine 2007-06-26
  • 打赏
  • 举报
回复
从来就没见过,d6,d7都是这样用,根本就没有你说的问题,除非不是bmp
zj420482596 2007-06-26
  • 打赏
  • 举报
回复
我也郁闷啊,刚进公司,昨天技术部给我出的一个题目,一天都没弄出来,以前也没想过这个问题,在delphi2006/2007里面,是可以用image控件,不用做任何处理就能直接显示256色位图文件的,但在delphi7下面会有问题,不然不信的可以加我QQ:420482596
constantine 2007-06-26
  • 打赏
  • 举报
回复
估计lz都不知道他要的是什么!
zj420482596 2007-06-26
  • 打赏
  • 举报
回复
不行的,要真能显示,代码都不用,直接改picture显示,找到文件位置,如果是24位的位图文件,就能正常显示,如果是256色的,大部出现的是黑色
jadeluo 2007-06-26
  • 打赏
  • 举报
回复
那就是下面这一句话:
Image1.Picture.LoadFromFile('c:\2.bmp');
zj420482596 2007-06-26
  • 打赏
  • 举报
回复
就是在delphi7中,如何显示256色的位图,不管用什么方法都行!!!
jadeluo 2007-06-26
  • 打赏
  • 举报
回复
你到底是想知道"如何用Image组件来显示256色位图", 还是想知道"如何将256色位图转换为Jpeg格式"?
zj420482596 2007-06-26
  • 打赏
  • 举报
回复
不行的,要真有这么简单,我就不会来这里提问了,
不信你可以去试试,在delphi7环境下,
如果你没有256色的位图文件,可以加我QQ:420482596,我传一张256色的位图给你
我想过用文件流,但是图片会失真,想转换成jpg格式再显示,但一样不行,显示出来的全是黑色
jadeluo 2007-06-26
  • 打赏
  • 举报
回复
“在delphi7下面用image控件显示不出来256色的图片”——这是谁告诉你的?

你上面给出的代码中, 根本没有在可视化组件中显示图片的代码,怎么可能会显示出图片来呢?

下面这一句不就可以显示出256色(其实是任意色彩数)的BMP了吗?
Image1.Picture.LoadFromFile('c:\2.bmp');

zj420482596 2007-06-26
  • 打赏
  • 举报
回复
怎么没人碰到过类似的问题吗?
在delphi7下面用image控件显示不出来256色的图片,请问有什么解决办法吗?
zj420482596 2007-06-26
  • 打赏
  • 举报
回复
图片我己发到你邮箱了,是BMP的文件,麻烦了
constantine 2007-06-26
  • 打赏
  • 举报
回复
可能不是bmp
constantine.student@sina.com
zj420482596 2007-06-26
  • 打赏
  • 举报
回复
要问题能解决,我再开个贴送你100分
zj420482596 2007-06-26
  • 打赏
  • 举报
回复
新建一个bmp文件,再另存为256色的bmp文件,我这里显示也没有问题啊,可问题是我们经理给我的那几张bmp文件显示就是有问题,用windows的画图工具显示是没问题的,这就奇了,怪了,不信我把那张图发你邮箱吧!!!救命啊,小姐
jadeluo 2007-06-26
  • 打赏
  • 举报
回复
256色的bmp文件, 咱们不缺,用"画图"程序另存一下,要几个有几个。

1,184

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧