当前位置:主页>销售管理软件> 列表

急,今天通宵在线等!我想把一个jpeg500*500象素的 找电脑城进销存

进销存软件版1楼: 我得到一个jpeg格式的 500*500象素的图片
我要把他变成 100*100 象素的新的图片 发送给终端
如何变呢
tempJpeg := TJPEGImage.Create;
tempstringstream.Position := 0;
tempJpeg.LoadFromStream(tempStringStream);//读取图片的内存
tempBmp:= TBitmap.Create;
tempBmp.Assign(tempJpeg);//放入临时BMP中
{ tempBmp.Height := 50; //高度
tempBmp.Width := 50; //宽度
r.TopLeft := Point(0, 0);
r.BottomRight := Point(tempBmp.Width, tempBmp.Height);
with tempBmp.Canvas do
begin
Pen.Style := psDash;
Brush.Style := bsClear;
Rectangle(0, 0, tempBmp.Width, tempBmp.Height);
StretchDraw(r, TGraphic(tempBmp));
end; }

Bitblt(Self.Canvas.Handle, 0, 0, 100, 100,
tempbmp.Canvas.Handle, 0, 0, SrcCopy);

tempJpeg.Assign(tempBmp);



这是我的代码,但是不成功 那个大侠执教一下

2楼: uses jpeg;

procedure JpegResize(j:TJPEGImage; AWidth,AHeight:Integer);
var
b1,b2 : TBitmap;
begin
b1:=TBitmap.Create;
try
b1.Assign(j);
b2:=TBitmap.Create;
try
with b2 do begin
Width :=AWidth ;
Height:=AHeight;
Canvas.StretchDraw(Rect(0,0,AWidth,AHeight),b1);
end;
j.Assign(b2);
finally
b2.Free;
end;
finally
b1.Free;
end;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
j:TJPEGImage ;
begin
j:=TJPEGImage.Create;
j.LoadFromFile(YourJpegFileName);
JpegResize(j,100,100);
j.SaveToFile(''new.jpg'');
j.Free;
end; 如进销存软件下载

3楼: 用这种方法 在终端显示出来的还是原来那么大
图片大小没有变化哦

4楼: 我先试试

5楼: 一个图像滤波算法
你那样直接截取当然不行
思路:
将图像分成N*N区域,然后选取其中一值或者区域内像素的平均值作为该像素的
平均值

6楼: 或者去网上找个,嘿

进销存软件版7楼: 不行 还是没有变小
还是原来那么大

8楼: 就没有一个现成的可以 改变象素大小的 函数吗?????

9楼: 你是怎么试的?我是经过测试通过后才贴出来的
(原图片尺寸不变,保存后的新图片是新的尺寸)。

10楼: tempJpeg.LoadFromStream(tempStringStream);
JpegResize(tempjpeg,100,100);
tempjpeg.SaveToStream(tempStringStream);
然后 手机从 tempStringStream 读出来以后
显示的大小 和 没有 调整的时候一摸一样

11楼: 因为我想适应手机屏幕的大小

12楼: 为什么用 TStringStream ?能否把代码贴全供分析? 如财务软件破解版下载

13楼: 我用 TMemoryStream 测试正常。

进销存软件版14楼: procedure SaveMemory(SourceJpg:TJpegImage; NewWidth,NewHeight:Integer; Memory:TStream);
Var
Jpg:TJpegImage;
Bmp:TBitmap;
begin
Jpg:=TJpegImage.Create;
Bmp:=TBitmap.Create;
Try


Bmp.Width:=NewWidth;
Bmp.Height:=NewHeight;
Bmp.Canvas.StretchDraw(Bmp.Canvas.ClipRect,SourceJpg);
Jpg.Assign(Bmp);
Jpg.SaveToStream(Memory);
Memory.Position:=0;
Finally
Jpg.Free;
Bmp.Free;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
Var
FileStream:TFileStream;
begin
if OpenPictureDialog1.Execute then
begin
Jpg.LoadFromFile(OPenPictureDialog1.FileName);
FileStream:=TFileStream.Create(''d:\a.jpg'',fmCreate);
Try
SaveMemory(Jpg,100,100,FileStream);
Finally
FileStream.Free;
FileStream:=nil;
end;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Jpg:=TJpegImage.Create;

end;

15楼: 测试结果与你的要求一致

16楼: 找到问题了,增加一句:
tempJpeg.LoadFromStream(tempStringStream);
JpegResize(tempjpeg,100,100);
[red]tempStringStream.Size:=0;[/red]


tempjpeg.SaveToStream(tempStringStream);

17楼: 我以前的解决方法
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3162651

18楼: kaida 的还有点问题
应该是

tempJpeg.LoadFromStream(tempStringStream);
JpegResize(tempjpeg,100,100);
tempStringStream.position:=0;
tempjpeg.SaveToStream(tempStringStream);
你的tempStringStream 应该已经有内容了
要把游标置在开头才行

19楼: 代码在下面,你看着修改一下就行了,
procedure SizedAPicture(AFromPicture, AToPicture: TPicture);//夏
var
ABitmap:TBitmap;
AFromWidth:Integer;
AFromHeigth:Integer;
AMinScal:Extended;
ABackBitmap:TBitmap;
AJPEG: TJPEGImage;
AOldMianJi:Integer;
ANewMianJi:Integer;
begin
AFromWidth:=AFromPicture.Width;
AFromHeigth:=AFromPicture.Height;

AOldMianJi:=AFromWidth*AFromHeigth;
ANewMianJi:=120000;//长和宽,你自已调,这样做主要是按比例缩放
AMinScal:=ANewMianJi/AOldMianJi;
AMinScal:=sqrt(AMinScal);

if AMinScal>=1 then
AMinScal:=1;
if AMinScal<1 then


begin
try
ABackBitmap:=TBitmap.Create;
ABackBitmap.Assign(AFromPicture.Graphic);

ABitmap:=TBitmap.Create;
ABitmap.Width:=Trunc(AFromWidth*AMinScal);
ABitmap.Height:=Trunc(AFromHeigth*AMinScal);

SetStretchBltMode(ABitmap.Canvas.Handle, HalfTone);
Stretchblt(ABitmap.Canvas.Handle, 0, 0, ABitmap.Width,
ABitmap.Height, ABackBitmap.Canvas.Handle, 0, 0, ABackBitmap.Width,
ABackBitmap.Height,
SRCCOPY);
ABitmap.PixelFormat := pf24bit;
AJPEG:=TJPEGImage.Create;
AJPEG.Assign(ABitmap);
AToPicture.Assign(AJPEG);
finally
AJPEG.Free;
ABitmap.Free;
ABackBitmap.Free;
end; // try/finally
end
else
begin
AToPicture.Assign(AFromPicture);
end;
end;//夏

20楼: 真的不明白,你究竟是问什么?
如果是更改图片的大小(500*500 - 100*100)。,那哪里有上面这么多答案?

进销存软件版21楼: 通宵在线等!?我还以为楼主很急呢,结果没回音了。

22楼: 多人接受答案了。 如电脑城进销存