Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/19: Рейтинг темы: голосов - 19, средняя оценка - 4.63
5 / 5 / 3
Регистрация: 18.10.2011
Сообщений: 156

Почему искажается изображение?

04.04.2012, 17:25. Показов 3770. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не могу понять откуда появляются полоски и искажение изображения.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
void ReadImage()
{
 /* for (int i=0; i<len; i++)
   for (int j=0; j<100; j++)
    {
     TColor Col= Image1->Canvas->Pixels[i][j];
     unsigned red   = GetRValue(Col); // красная составляющая
     unsigned green = GetGValue(Col); // зеленая составляющая
     unsigned blue  = GetBValue(Col); // blue
 
     // Яркость = 0,59*Зеленый+0,3*Красный+0,11*Синий
     Pxls[x][y]= 0.59*Col[x].rgbtGreen+0.3*Col[x].rgbtRed+0.11*Col[x].rgbtBlue;
    }             */
 for (int y=0; y<Form1->Image1->Picture->Height; y++)
  {
   RGBTRIPLE* Col = (RGBTRIPLE *) Form1->Image1->Picture->Bitmap->ScanLine[y];
   for (int x=0; x<Form1->Image1->Picture->Width; x++)
    {
    /* unsigned red   = Col[x].rgbtBlue; // красная составляющая
     unsigned green = Col[x].rgbtGreen; // зеленая составляющая
     unsigned blue  = Col[x].rgbtRed; // blue  */
 
     // Яркость = 0,59*Зеленый+0,3*Красный+0,11*Синий
     Pxls[x][y]= 0.59*Col[x].rgbtGreen+0.3*Col[x].rgbtRed+0.11*Col[x].rgbtBlue;
    }
  }
}
//---------------------------------------------------------------------------
void WriteImage()
{
 for (int y=0; y<Form1->Image1->Picture->Height; y++)
   for (int x=0; x<Form1->Image1->Picture->Width; x++)
    Form1->Image1->Canvas->Pixels[x][y]=TColor(RGB(Pxls[x][y],Pxls[x][y],Pxls[x][y]));
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.04.2012, 17:25
Ответы с готовыми решениями:

Почему искажается массив?
Вот такой фрагмент и результат его выполнения. Почему то искажается содержимое массива a после заполнения массива b. Знатоки С++ объясните,...

Lineage2: изображение сильно искажается
Я начинаю играть в Lineage2 и через 5-10 мин с экраном происходит вот это-экран сильно эскажается начинает всё рябить и дрыгаться на вирусы...

При запуске игрушек искажается изображение
Вообщем такая проблема. При запуске игрушек искажается изображение (появляются то черные то зеленые квадратики, сначала полосками по...

12
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,461
05.04.2012, 09:22
а как оно выглядит? по коду вроде все ничего
0
 Аватар для gumi250
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
05.04.2012, 11:26
Уверены, что изображение 24 бита?
0
5 / 5 / 3
Регистрация: 18.10.2011
Сообщений: 156
05.04.2012, 11:32  [ТС]
Цитата Сообщение от vxg Посмотреть сообщение
а как оно выглядит? по коду вроде все ничего
Сложно объяснить, каждое изображение он коверкает по-своему
(код в архиве, для проверки просто нажать на рисунок)
Вложения
Тип файла: zip 1.zip (1.21 Мб, 49 просмотров)
0
5 / 5 / 3
Регистрация: 18.10.2011
Сообщений: 156
05.04.2012, 11:33  [ТС]
Цитата Сообщение от gumi250 Посмотреть сообщение
Уверены, что изображение 24 бита?
Почему 24 бита должно быть?
0
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,461
05.04.2012, 11:45
но вы ведь осуществляете запись перед чтением, а массив не инициализирован. ясное дело что оно рисует вообще неясно что.
C++
1
2
WriteImage();
ReadImage();
0
 Аватар для gumi250
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
05.04.2012, 11:47
Еще бы картинку которая искажается приложили бы
0
5 / 5 / 3
Регистрация: 18.10.2011
Сообщений: 156
05.04.2012, 11:52  [ТС]
Цитата Сообщение от vxg Посмотреть сообщение
но вы ведь осуществляете запись перед чтением, а массив не инициализирован. ясное дело что оно рисует вообще неясно что.
C++
1
2
WriteImage();
ReadImage();
Не имеет значения)
Т.к. запись идёт и в самом начале при рисовке или открытии файла)


Добавлено через 2 минуты
Цитата Сообщение от gumi250 Посмотреть сообщение
Еще бы картинку которая искажается приложили бы
Если не сложно, то можете открыть выложенный архив, там программа. и посмотреть какая фигня там творится)
0
 Аватар для gumi250
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
05.04.2012, 11:53
Если не сложно, то можете открыть выложенный архив, там программа. и посмотреть какая фигня там творится)
Картинки, что у меня есть при открытии в вашей программе не искажаются
0
5 / 5 / 3
Регистрация: 18.10.2011
Сообщений: 156
05.04.2012, 11:58  [ТС]
Цитата Сообщение от gumi250 Посмотреть сообщение
Картинки, что у меня есть при открытии в вашей программе не искажаются
Искажает почему-то не все. Для проверки записи нужно нажать на картинку.
Даже ничего не открывая, нажать на нарисованный вначале градиент и увидите полоски.
0
 Аватар для gumi250
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
05.04.2012, 12:25
Pxls можно сделать массивом байт
C++
1
2
3
4
5
6
7
8
9
10
11
12
 void WriteImage()
{ for (int y=0; y<Form1->Image1->Picture->Height; y++)
    {
     RGBTRIPLE* Col = (RGBTRIPLE *) Form1->Image1->Picture->Bitmap->ScanLine[y];
     for (int x=0; x<Form1->Image1->Picture->Width; x++)
        {
         Col[x].rgbtGreen=Pxls[x][y];
         Col[x].rgbtRed=Pxls[x][y];
         Col[x].rgbtBlue=Pxls[x][y];
        }
    }
}
1
5 / 5 / 3
Регистрация: 18.10.2011
Сообщений: 156
05.04.2012, 16:34  [ТС]
Точно))
Спасибо)

Вот только почему другой код не работает.

Добавлено через 36 минут
и походу монохромные перекрашивает)

Добавлено через 3 часа 23 минуты
Ещё один большой вопрос:
Почему при выводе нескольких Pxls[x][y] одного цвета выводятся четыре разных значения, которые повторяются в одном порядке.
C#
1
2
3
4
5
6
7
 Form1->Memo1->Lines->Add(Pxls[1][1]);     226
 Form1->Memo1->Lines->Add(Pxls[2][1]);     104
 Form1->Memo1->Lines->Add(Pxls[3][1]);     178
 Form1->Memo1->Lines->Add(Pxls[4][1]);     254
 Form1->Memo1->Lines->Add(Pxls[5][1]);     226
 Form1->Memo1->Lines->Add(Pxls[6][1]);     104
 Form1->Memo1->Lines->Add(Pxls[7][1]);     178
Объясните, пожалуйста!!!
0
3 / 3 / 2
Регистрация: 05.04.2012
Сообщений: 16
05.04.2012, 16:43
Я так понял что нужно получить черно-белое изображение

Вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void toGray()
{
 byte *p; byte temp;
 for (int y=0; y<Form1->Image1->Picture->Height; y++)
  {
   p = (byte*)Form1->Image1->Picture->Bitmap->ScanLine[y];
   for (int x=0; x<Form1->Image1->Picture->Width*3; x+=3)
    { 
     temp = 0.3*p[x] + 0.59*p[x+1] + 0.11*p[x+2];
     p[x] = p[x+1] = p[x+2] = temp; 
    }
  }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.04.2012, 16:43
Помогаю со студенческими работами здесь

Искажается изображение на ноутбуке samsung R60plus
Привет всем! С недавних пор дисплей на ноутбуке samsung R60plus начал &quot;пикселизоваться&quot;, точное определение этому эффекту не...

GTX 650 Ti Boost, искажается изображение
Проблема с Geforce GTX 650ti boost. Когда заходишь в 3д приложения, искажается изображение. Температура не поднимается выше 35, а просто...

Asus gtx 770 directCu2 искажается изображение
Помогите купил, после установки драйверов, в конце загрузки виндов изображение искажается белыми прямоугольниками, потом загружается...

Искажается изображение при сворачивании/разворачивании игр
Не могу понять с чем это связано, монитор купил недавно ED242QR приложил фото, не лечится никак только перезагрузкой переустанавливал...

Vmware, при изменени разрешения экрана изображение искажается
Почему в режиме strech guest в полноэкранном режиме при изменени разрешения экрана изображение искажается? В чем дело?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru