Форум: "Начинающим";
Текущий архив: 2014.08.24;
Скачать: [xml.tar.bz2];
ВнизПомогите с арифметикой Найти похожие ветки
← →
Вася (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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.002 c