大虾,救命! image小问题!(50分)

  • 主题发起人 主题发起人 poo1234
  • 开始时间 开始时间
P

poo1234

Unregistered / Unconfirmed
GUEST, unregistred user!
我对一个image进行一分为二,把图象保存到另一个image

代码如下:
procedure TForm1.BitBtn1Click(Sender: TObject);
var
i,j,h,w:integer;
hdc1,hdc2:hdc;

begin
w:=image1.width;
h:=image1.Height;
image1.Visible:=true;
form1.Repaint;
// paintbox1.Refresh();
// hdc2:=paintbox1.Canvas.Handle; //原本用它处理,但是不懂怎么保存
hdc2:=image2.Canvas.Handle; //image保存原图,image2保存分割的图
hdc1:=image1.Canvas.Handle; //

image2.Width:=h div 2;
image2.Width:=w;
for i:=0 to w do
begin
for j:=0 to 1 do
begin

bitblt(hdc2,0,0,i,h div 4,hdc1,w-i,0,srccopy);
bitblt(hdc2,0,h div 4,i,h div 4,hdc1,w-i,h div 4,srccopy);
end;
end;
end;
问题出现,image2的大小给定死了,图要么显示不完整,要么就是显示图还显示了白色!
怎么回事?

大家有没有更好的分割方法!!

谢谢
 
procedure TForm1.Button1Click(Sender: TObject);
begin
Image2.Width:=Image1.Width;
Image2.Height:=Image1.Height div 2;
Image2.Canvas.CopyRect(Rect(0, 0, Image2.Width, Image2.Height),
Image1.Canvas, Rect(0, 0, Image2.Width, Image2.Height));
end;
 
以下是24位真彩色时取前行的情况,你很看明白,你的问题就解决了!
procedure TForm1.Button3Click(Sender: TObject);
var
bith:tBitmapFileHeader;
bmiHeader: TBitmapInfoHeader;
hang,x,y:dword;
oset:dword;
begin
fi:=edit1.Text;//原文件名
FileHandle := FileOpen(fi, fmShareDenyNone);

if FileHandle > 0 then
begin
fileread(filehandle,bith,sizeof(bith));
fileread(filehandle,bmiheader,sizeof(bmiheader));
// bith.bfSize; 文件大小
// bith.bfOffBits; 图形偏移
// bmiheader.biWidthl; 宽
// bmiheader.biHeight; 高
// bmiheader.biBitCount; bit位
// bmiheader.biSizeImage; 图形大小
// edit1.Text:=inttostr(bith.bfOffBits );
end;
tof:= filecreate('my1.bmp');

hang:=7000;

yus:=bmiheader.biwidth mod 4;
bith.bfSize :=bith.bfOffBits+hang*bmiheader.biWidth*3+hang*yus;
bmiheader.biSizeImage:=hang*bmiheader.biWidth*3+hang*yus ;
bmiheader.biHeight:=hang;


filewrite(tof,bith,sizeof(bith));
filewrite(tof,bmiheader,sizeof(bmiheader));

yu:=0;

for y:= 1 to hang do
begin
oset:=bith.bfOffBits+(y-1)*bmiheader.biWidth*3+(y-1)*yus;
fileseek(filehandle,oset,0);
fileread(filehandle,pi,bmiheader.biWidth*3);
FileWrite(tof,pi, bmiheader.biWidth*3);
filewrite(tof,yu,yus);
end;
fileclose(tof);
fileclose(filehandle);
//image1.Refresh;

end;
 
后退
顶部