Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1390735988
Сварщик
2014-01-26 15:33
2014.08.24
AV при попытке расшифровать файл через DecryptFileA (и W тоже)


11-1251010071
Dy1
2009-08-23 10:47
2014.08.24
базы данных


2-1380648981
Иван
2013-10-01 21:36
2014.08.24
Архивирование Zipforge


15-1390920271
ухты
2014-01-28 18:44
2014.08.24
Когда выборы


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский