在網上找了一段代碼,這應該是最快的(不使用GDI+),尤其是對大圖,但它是旋轉90度,怎么樣讓它旋轉-90度呢,望高人指點。先謝謝!
procedure Rotate270(Bitmap: TBitmap);
var
aStream: TMemorystream;
//記憶體流
header: TBITMAPINFO;
dc: hDC;
P: ^THelpRGB;
x, y, w, h: Integer; //w寬度,h高度
RowOut: pRGBArray;
begin
//創建記憶體流
aStream := TMemoryStream.Create;
//設定大小,必須是4的倍數
aStream.SetSize(Bitmap.Height * Bitmap.Width * 4);
with header.bmiHeader do //操作位圖檔案
begin
biSize := SizeOf(TBITMAPINFOHEADER); //大小
biWidth := Bitmap.Width; //位圖寬
biHeight := Bitmap.Height; //位圖高
biPlanes := 1;
biBitCount := 32;
//無壓縮
biCompression := 0;
biSizeimage := aStream.Size;
biXPelsPerMeter := 1; //水平解析度
biYPelsPerMeter := 1; //豎直解析度
biClrUsed := 0;
biClrImportant := 0;
end;
dc := GetDC(0);
P := aStream.Memory;
GetDIBits(dc, Bitmap.Handle, 0, Bitmap.Height, P, header, dib_RGB_Colors);
ReleaseDC(0, dc);
h := bitmap.Height; //源圖高
w := bitmap.Width; //源圖寬
//指定要創建的位圖的大小尺寸
bitmap.Width := h;
bitmap.height := w;
for y := 0 to (w - 1) do
begin
rowOut := Bitmap.ScanLine[y]; //獲取新的位圖資訊
P := aStream.Memory; //設定檔案指標
inc(p, y); //指標移位
for x := 0 to (h - 1) do
begin
rowout[x] := p^.rgb; //進行資料轉移
inc(p, w);
end;
end;
aStream.Free; //釋放資源
end;
uj5u.com熱心網友回復:
procedure TForm1.Button1Click(Sender: TObject);var
WicImg: TWICImage;
Factory: IWICImagingFactory; {類工廠介面}
FlipRotator: IWICBitmapFlipRotator; {旋轉變換介面}
begin
{先建立 TWICImage 類并載入圖片}
WicImg := TWICImage.Create;
WicImg.LoadFromFile('c:\temp\test.jpg'); {獲取類工廠介面}
Factory := WicImg.ImagingFactory; {讓類工廠建立旋轉變換介面}
Factory.CreateBitmapFlipRotator(FlipRotator); {執行旋轉變換, 這里是旋轉 90度角; 注意旋轉后的資料在 FlipRotator}
FlipRotator.Initialize(WicImg.Handle, WICBitmapTransformRotate270); {更新 TWICImage 中的影像}
WicImg.Handle := IWicBitmap(FlipRotator); {看看}
Canvas.Draw(0, 0, WicImg); {釋放}
FlipRotator := nil; Factory := nil; WicImg.Free;
end; //還是上面的程式, 給了些回傳值的判斷 procedure TForm1.Button2Click(Send
uj5u.com熱心網友回復:
uses Wincodecuj5u.com熱心網友回復:
謝謝樓上的回復,還沒看懂,慢慢研究一下。另外我上邊的代碼Rotate270(Bitmap: TBitmap),270應該是90,忘改了。我是想在原代碼上改為旋轉270度,結果沒弄成。
uj5u.com熱心網友回復:
記得windows API下有直接進行圖片變形的API的uj5u.com熱心網友回復:
直接按照檔案格式來操作檔案吧。uj5u.com熱心網友回復:
用gdi+,否則很麻煩。uj5u.com熱心網友回復:
不錯學習學習轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/104496.html
