全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2426
推到 Plurk!
推到 Facebook!

讓圖片可以轉90度,Show不出來

答題得分者是:jow
cobraliu
中階會員


發表:15
回覆:75
積分:83
註冊:2007-11-22

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-12-05 14:32:12 IP:59.127.xxx.xxx 訂閱
-------------------------------------------------------------------
function SCRotateLeftBitmap(Bitmap : TBitmap) : TBitmap;
var
x,y : Integer;
Hoogte, Breedte : Integer;
begin
Breedte:=Bitmap.Width;
Hoogte:=Bitmap.Height;
Result := TBitmap.Create;
try
with Result do
begin
Width:=Hoogte;
Height:=Breedte;
for x:=0 to Breedte-1 do
for y:=0 to Hoogte-1 do
Canvas.Pixels[Hoogte-y-1,x]:=Bitmap.Canvas.Pixels[x,y];
end;
except
Result.Free;
raise;
end;
end;
----------------------------------------------------------------
上述的程式段是翻了某版大的寫作,主要是讓圖片可以轉90度
小弟做了一個button內容如下:
image2.Picture.Bitmap.Assign(SCRotateLeftBitmap(image1.Picture.Bitmap));
image2.Canvas.Refresh;
image1是讀入一個jpg的圖檔了,但去執行上面那兩行,image2卻無法承現出轉90度的畫面
請問大大們可以指引一下方向,應該如何做才可以Show 圖跟轉向呢???
------
初學、初學、學了很久...還是在初學階段..Orz
jow
尊榮會員


發表:66
回覆:751
積分:1253
註冊:2002-03-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-12-11 15:36:09 IP:210.66.xxx.xxx 訂閱

[code delphi]
unit fMain;

interface

uses
Graphics, Forms, ExtCtrls, StdCtrls, Controls, Classes, SysUtils;

type
TForm1 = class(TForm)
Image1: TImage;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
function SCRotateLeftBitmap(src: TBitmap; var dest: TBitmap): Boolean;
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

function TForm1.SCRotateLeftBitmap(src: TBitmap; var dest: TBitmap): Boolean;
var
X, Y: Integer;
begin
FreeAndNil(dest);
if Assigned(src) and
(src.Width > 0) and
(src.Height > 0) then
begin
dest := TBitmap.Create;
try
dest.Width := src.Height;
dest.Height := src.Width;
for X := 0 to src.Width-1 do
for Y := 0 to src.Height-1 do
dest.Canvas.Pixels[src.Height-Y-1,X] := src.Canvas.Pixels[X,Y];
except
FreeAndNil(dest);
end;
end;
Result := dest <> nil;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
src, dest: TBitmap;
begin
src := Image1.Picture.Bitmap;
dest := nil;//initial
if SCRotateLeftBitmap(src, dest) then
try
Canvas.Draw(10,10,dest);
finally
FreeAndNil(dest);
end;
end;

end.

[/code]
cobraliu
中階會員


發表:15
回覆:75
積分:83
註冊:2007-11-22

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-12-13 14:57:34 IP:59.127.xxx.xxx 訂閱
謝謝Jaw大大指導,也讓小弟知道一些之前自已的問題


[code delphi]
procedure TForm1.Button1Click(Sender: TObject);
var
j_in:TJPEGImage;//自已新增的部份
src, dest: TBitmap;
begin
j_in := TJPEGImage.Create;//自已新增的部份
j_in.LoadFromFile('e:\1.jpg');//自已新增的部份
image1.Picture.Bitmap.Assign(j_in);//自已新增的部份

src := Image1.Picture.Bitmap;
dest := nil;//initial
if SCRotateLeftBitmap(src, dest) then
BEGIN
try
image1.Picture.Assign(dest);
//Canvas.Draw(1,1,dest);
finally
FreeAndNil(dest);
end;
END
ELSE
showmessage('Error');
end;

[/code]

另外,似乎如果遇到Jpeg的檔案,好像是不能直接做轉向的處理,上述改的部份,希望可以呈現在同一個Image,就如同AcdSee的功能一樣..@@
另外,請問觀念性的問題,在處理Jpeg,Bmp,在Delphi中他的處理方式是不是以Bmp為主,如:Jpg要做一些圖形上的動作,如上述的轉向,要先轉成Bmp,是否有其中的原理??
------
初學、初學、學了很久...還是在初學階段..Orz
系統時間:2024-04-20 8:50:39
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!