怎样才能处理一副图片,把它扶正,例如扫描的时候歪了,将它自动扶正. 如果有什么收费的sdk包,也可以阿, 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 //给你一个用线性代数的矩阵方法无损旋转的范例!!//保你好用!当时没写注释,你就将就着看吧!!//好的话,就给我多加点分啊!!!unit Unit1;interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;type TForm1 = class(TForm) Button2: TButton; Button1: TButton; Image1: TImage; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1; NewBmp: TBitmap; TempBmp: TBitmap; OldBmp: TBitmap;implementation{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);type pRGBTripleArray = ^TRGBTripleArray; TRGBTripleArray = ARRAY[0..32768-1] OF TRGBTriple;var T: Real; k, i, j, bmpHeight, bmpWidth: Integer; RowRotated: pRGBTripleArray; RowOriginal: pRGBTripleArray; jOriginal, ioriginal: Integer;begin NewBmp:=TBitmap.Create; TempBmp := TBitmap.Create; TempBmp.PixelFormat := pf24bit; TempBmp.Width := image1.Width; TempBmp.Height := image1.Height; TempBmp.Canvas.Draw(0, 0, image1.picture.graphic); Canvas.Draw(120, 20, TempBmp); NewBmp.PixelFormat := pf24bit; NewBmp.Width:=TempBmp.width; NewBmp.height := TempBmp.height; bmpheight := TempBmp.height; bmpWidth := TempBmp.width; for k:=1 to 10 do begin T := k*3.14/180; for j := bmpHeight-1 downto 0 do begin RowRotated := NewBmp.ScanLine[j]; for i := bmpWidth-1 downto 0 do begin iOriginal := Round(i * Cos(T) + j * Sin(T)); jOriginal := Round(-i * Sin(T) + j * Cos(T)); if (iOriginal>=0) and (iOriginal <= bmpWidth-1) and (jOriginal>=0) and (jOriginal <= bmpHeight-1) then begin RowOriginal := TempBmp.ScanLine[jOriginal]; RowRotated[i] := RowOriginal[iOriginal]; end else begin RowRotated[i].rgbtBlue := 0; RowRotated[i].rgbtGreen := 0; RowRotated[i].rgbtRed := 255; end end end; Canvas.Draw(120, 20, NewBmp); end; NewBmp.Free;end;procedure TForm1.Button2Click(Sender: TObject);begin Canvas.Draw(120, 20, TempBmp);end;procedure TForm1.FormCreate(Sender: TObject);begin image1.picture.LoadFromFile('1.bmp');end;end. 楼上的兄弟些:可能我没说的明白,重要的不是旋转,这个我也可以实现,是如何把一张不知道转了多少度(当然一般情况下应该不会大于45°了),把它扶正,好让我进行ocr识别(这是后续处理了).在等两天看看,有没有更实用的建议,这个星期一定结贴.sdk包也可以阿 高分求救,COM口通讯的例子,分数不是问题,急救啊 请问怎么让 listview能像MEMO一样显示数据 希望大家都可以一起来,定制我们的准则 高分易得,一问难求!(如何实现类似java中eval函数功能) 急!!在线等待,数据导入导出问题(100分) UP者有分 我的报表fastreport每次打印,第一页都是空白的,为什么了?????????? 多层数据库应用程序中TDataSetProvider的问题 我是用ADSL上网的,外网机器可以访问我的Web服务器吗? 各位大虾:请问如何调用第三方的Dll,如第三方SDK中的Dll. 替换无类型文件中的字符串 招聘!!!
//保你好用!当时没写注释,你就将就着看吧!!
//好的话,就给我多加点分啊!!!
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls;type
TForm1 = class(TForm)
Button2: TButton;
Button1: TButton;
Image1: TImage;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
NewBmp: TBitmap;
TempBmp: TBitmap;
OldBmp: TBitmap;
implementation{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);
type
pRGBTripleArray = ^TRGBTripleArray;
TRGBTripleArray = ARRAY[0..32768-1] OF TRGBTriple;
var
T: Real;
k, i, j, bmpHeight, bmpWidth: Integer;
RowRotated: pRGBTripleArray;
RowOriginal: pRGBTripleArray;
jOriginal, ioriginal: Integer;
begin
NewBmp:=TBitmap.Create;
TempBmp := TBitmap.Create;
TempBmp.PixelFormat := pf24bit;
TempBmp.Width := image1.Width;
TempBmp.Height := image1.Height;
TempBmp.Canvas.Draw(0, 0, image1.picture.graphic);
Canvas.Draw(120, 20, TempBmp);
NewBmp.PixelFormat := pf24bit;
NewBmp.Width:=TempBmp.width;
NewBmp.height := TempBmp.height;
bmpheight := TempBmp.height;
bmpWidth := TempBmp.width; for k:=1 to 10 do
begin
T := k*3.14/180;
for j := bmpHeight-1 downto 0 do
begin
RowRotated := NewBmp.ScanLine[j];
for i := bmpWidth-1 downto 0 do
begin
iOriginal := Round(i * Cos(T) + j * Sin(T));
jOriginal := Round(-i * Sin(T) + j * Cos(T));
if (iOriginal>=0) and (iOriginal <= bmpWidth-1) and
(jOriginal>=0) and (jOriginal <= bmpHeight-1) then
begin
RowOriginal := TempBmp.ScanLine[jOriginal];
RowRotated[i] := RowOriginal[iOriginal];
end
else
begin
RowRotated[i].rgbtBlue := 0;
RowRotated[i].rgbtGreen := 0;
RowRotated[i].rgbtRed := 255;
end
end
end;
Canvas.Draw(120, 20, NewBmp);
end;
NewBmp.Free;
end;procedure TForm1.Button2Click(Sender: TObject);
begin
Canvas.Draw(120, 20, TempBmp);end;procedure TForm1.FormCreate(Sender: TObject);
begin
image1.picture.LoadFromFile('1.bmp');
end;end.
可能我没说的明白,重要的不是旋转,这个我也可以实现,是如何把一张不知道转了多少度(当然一般情况下应该不会大于45°了),把它扶正,好让我进行ocr识别(这是后续处理了).
在等两天看看,有没有更实用的建议,这个星期一定结贴.sdk包也可以阿