Главная страница
    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
2-1380422621
Коля
2013-09-29 06:43
2014.08.24
Узнать заводской номер жёсткого диска


4-1269353305
ZeTToG350
2010-03-23 17:08
2014.08.24
Запрет внедрения в процесс


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


15-1390735988
Сварщик
2014-01-26 15:33
2014.08.24
AV при попытке расшифровать файл через DecryptFileA (и W тоже)


15-1390592076
Дмитрий СС
2014-01-24 23:34
2014.08.24
Выдача сдачи наличными.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский