![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Доброго времени суток!
Подскажите, пожалуйста, с такой темой. Мне нужно повернуть битмап на 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; Последний раз редактировалось BProg, 09.10.2014 в 20:02. |