Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2014.08.24;
Скачать: CL | DM;

Вниз

Помогите с арифметикой   Найти похожие ветки 

 
Вася   (2013-09-30 11:02) [0]

Функция поворота на 270 градусов изображения, при выполнении указатель чего-то вылазит за границы RawImage, как его правильно повернуть?
function RotateBMP270(aBitMap: TBitMap):TBitmap;    //поворот на 270*
var
x, y:integer;
pix3in, pix3out : ^TRGBtriple;
pix_p:Pointer;
begin
   result:=Tbitmap.Create;
   result.Assign(aBitMap);
   result.Width:=aBitMap.Height;
   result.Height:=aBitMap.Width;
   pix_p:=result.RawImage.data;
   pix3in:=pix_p;
   pix_p:=aBitMap.RawImage.Data;
   pix3out:=pix_p;
   result.BeginUpdate(false);
for x:=0 to aBitMap.Width-1 do
for y:=1 to aBitMap.Height-1 do
begin
 inc(pix3out, y*aBitMap.Width-y*x);
 pix3in^:=pix3out^;
 inc(pix3in);
end;
result.EndUpdate(false);
end;                      


 
Плохиш ©   (2013-09-30 11:15) [1]


> Вася   (30.09.13 11:02)

> при выполнении указатель чего-то вылазит за границы RawImage

Так размеры для результата надо задавать с учётом повёрнутого изображения.
Вырежи квадрат из бумаги, поверни и попробуй вписать его в неповёрнутый квадрат.


 
RWolf ©   (2013-09-30 11:17) [2]

> inc(pix3out, y*aBitMap.Width-y*x);
как-то подозрительно этот указатель скачет, явно не по строкам.


 
Вася   (2013-09-30 11:23) [3]

ну вроде ж высоту и ширину поменял местами:
result.Width:=aBitMap.Height;
result.Height:=aBitMap.Width;



> как-то подозрительно этот указатель скачет, явно не по строкам.

Ну да, считывает колонку исходного битмапа и записывает как строку результирующего


 
[ВладОшин] ©   (2013-09-30 11:30) [4]

Может, округленно получается при нецелочисленных операциях (погрешность) и она "вылазиет" потом
Если увеличить на несколько пикселов (и W, и H) результат - получается?


 
RWolf ©   (2013-09-30 11:32) [5]


> Ну да, считывает колонку исходного битмапа

Так задумано. А на деле что?


 
Плохиш ©   (2013-09-30 11:32) [6]


> Вася   (30.09.13 11:23) [3]
> ну вроде ж высоту и ширину поменял местами:

Ты на бумажке уже потренировался?


 
Вася   (2013-09-30 11:34) [7]

извините господа, перед inc(pix3out, y*aBitMap.Width-y*x); нужно было обнулить указатель, забыл


 
Sha ©   (2013-09-30 14:07) [8]

> Вырежи квадрат из бумаги,
> поверни и попробуй вписать его в неповёрнутый квадрат.

нормально вписался ))


 
Туповатый ©   (2013-09-30 14:32) [9]


> Sha ©   (30.09.13 14:07) [8]

неправильно повернул, значит. из всего многообразия выбрал 8 неправильных вариантов.


 
[ВладОшин] ©   (2013-09-30 14:38) [10]


> Туповатый ©   (30.09.13 14:32) [9]
>
>

а где еще 4 нашлось? (90,180,270,360(0))


 
[ВладОшин] ©   (2013-09-30 14:39) [11]

а.. в другую сторону


 
Inovet ©   (2013-09-30 15:10) [12]

> [10] [ВладОшин] ©   (30.09.13 14:38)
> а где еще 4 нашлось?

А перевернуть?


 
Sha ©   (2013-09-30 19:44) [13]

> из всего многообразия выбрал 8 неправильных вариантов.

из многообразия поворотов на 270 градусов?


 
Вася   (2013-09-30 20:18) [14]

Еще засада, Есть картинки, в которых aBitMap.RawImage.DataSize != aBitMap.Height*aBitMap.Width*3 (для 24-битных битмапов) aBitMap.RawImage.DataSize больше примерно на 2-3 кб в зависимости от размера картинки, подозреваю дело в выравнивании, как правильно работать с такими картинками?


 
MBo ©   (2013-10-01 06:30) [15]

>подозреваю дело в выравнивании, как правильно работать с такими картинками?
Учесть выравнивание


 
MBo ©   (2013-10-01 07:10) [16]

http://en.wikipedia.org/wiki/BMP_file_format#Pixel_storage


 
RWolf ©   (2013-10-01 10:04) [17]

Проще использовать свойство Scanline.



Страницы: 1 вся ветка

Текущий архив: 2014.08.24;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.006 c
15-1390664723
Novicer
2014-01-25 19:45
2014.08.24
Как использовать строковую переменную в SQL-запросе?


2-1380528742
12345
2013-09-30 12:12
2014.08.24
не вызывается событие OnBeforePost


15-1390656072
Jimmy
2014-01-25 17:21
2014.08.24
Карточные игры


2-1380744070
Антипов В.А.
2013-10-03 00:01
2014.08.24
Проблема с поддержкой латышских букв в программе


11-1252421746
varag
2009-09-08 18:55
2014.08.24
Работа с ListView