Доброго времени суток!
Подскажите, пожалуйста, с такой темой. Мне нужно повернуть битмап на 90 градусов. Ниже код, работает на размерах картинки 1275*1740 и несколько больше, а вот на 2550*3480 уже нет, на выходе пустой лист. Неважно цветная ли, ч/б или с оттенками серого. Белый лист, а для ч/б - черный и все. Хотел в аттач два скана разных размеров кинуть, но тяжелые даже в архиве.
Помогите, понять что делаю не верно.
Спасибо.
Код:
procedure TForm2.Button1Click(Sender: TObject);
var
tmpBMP, BMP: TBitmap;
XForm: TXForm;
C, S: Single;
angle: Extended;
errorCode: Integer;
error: string;
i:Integer;
begin
for i := 1 to 2 do
begin
angle:=0.5*pi;
if Sender=Button1 then
angle:=-angle;
BMP:=TBitmap.Create;
BMP.LoadFromFile('D:\Scan'+IntToStr(i)+'.bmp');
C := Cos(angle);
S := Sin(angle);
XForm.eM11 := C;
XForm.eM12 := S;
XForm.eM21 := -S;
XForm.eM22 := C;
XForm.eDx :=(Bmp.Height - Bmp.Width * C + Bmp.Height * S) / 2;
XForm.eDy :=(Bmp.Width - Bmp.Width * S - Bmp.Height * C) / 2;
tmpBMP:=TBitmap.Create;
tmpBMP.Width:=BMP.Height;
tmpBMP.Height:=BMP.Width;
SetStretchBltMode(tmpBMP.Canvas.Handle, STRETCH_HALFTONE);
SetGraphicsMode(tmpBMP.Canvas.Handle, GM_ADVANCED);
SetWorldTransform(tmpBMP.Canvas.Handle, XForm);
if BitBlt(tmpBMP.Canvas.Handle, 0, 0, tmpBMP.Height, tmpBMP.Width, BMP.Canvas.Handle,
0, 0, SRCCOPY) then
begin
tmpBMP.SaveToFile('D:\ScanRotated'+IntToStr(i)+'.bmp');
end
else
begin
errorCode:=GetLastError;
error:='Не удалось выполнить поворот страницы';
if errorCode<>0 then
error:=error+': '+SysErrorMessage(errorCode);
MessageBox(Self.Handle, PChar(error),'Ошибка',MB_OK or MB_ICONWARNING);
end;
tmpBMP.Free;
BMP.Free;
end;
end;