Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Непонятный глюк Добавлено: 20.03.11 11:52  

Автор вопроса:  Лёха | Web-сайт: supersait16.ucoz.ru
Обьясните мне в чем тут дело,вроде написано всё верно,а выдает какой то бред,я уже и лог начал вести,вот кусок,посмотрите какой бред выдает :


R = 218 * 0 ,G = 199 * 0 ,B = 185 * 0
 R = 1 , G = 1 , B = 0
 R = 209 * 0 ,G = 191 * 0 ,B = 179 * 0
 R = 1 , G = 1 , B = 0
 R = 204 * 0 ,G = 184 * 0 ,B = 173 * 0
 R = 1 , G = 1 , B = 0
 R = 220 * 0 ,G = 202 * 0 ,B = 188 * 0
 R = 1 , G = 1 , B = 0
 R = 214 * -1 ,G = 196 * -1 ,B = 184 * -1
 R = 1 , G = 1 , B = -214
 R = 208 * 0 ,G = 192 * 0 ,B = 179 * 0
 R = 1 , G = 1 , B = 0
 R = 226 * 0 ,G = 207 * 0 ,B = 193 * 0
 R = 1 , G = 1 , B = 0
 R = 228 * 0 ,G = 209 * 0 ,B = 195 * 0
 R = 1 , G = 1 , B = 0
 R = 223 * 0 ,G = 207 * 0 ,B = 194 * 0
 R = 1 , G = 1 , B = 0
 R = 209 * 0 ,G = 191 * 0 ,B = 179 * 0
 R = 2 , G = 1 , B = 0
 R = 204 * 0 ,G = 184 * 0 ,B = 173 * 0
 R = 2 , G = 1 , B = 0

как такое может быть?

вот сам код :
[CODE]
void Process_Convolution3x3(IMG * Pic, Matrix_3x3 M)
{
int TR, TG, TB;
int R, G, B;

UINT IDX;

FILE * f = fopen("log.txt","w");

for(int Y = 1;Y < Pic -> Height - 1;Y++)
{
for(int X = 1;X < Pic -> Width - 1;X++)
{
//Обрабатываем квадрат заданый матрицой
for(int Row = -1;Row < 2;Row++)
{
for(int Item = -1;Item < 2;Item++)
{
IDX = ((Y + Row) * Pic -> Width + (X + Item)) * Pic -> BytesPerPixel;

TR = *(Pic -> Data + IDX + Pic -> R_IDX);
TG = *(Pic -> Data + IDX + Pic -> G_IDX);
TB = *(Pic -> Data + IDX + Pic -> B_IDX);

if(X < 100 && Y < 100)
{
fprintf(f," R = %d * %d ,G = %d * %d ,B = %d * %d \n",TR,M.Mat[Row + 1][Item + 1] ,TG,M.Mat[Row + 1][Item + 1],TB,M.Mat[Row + 1][Item + 1]);
}

TR *= M.Mat[Row + 1][Item + 1];
TG *= M.Mat[Row + 1][Item + 1];
TB *= M.Mat[Row + 1][Item + 1];

if(X < 100 && Y < 100)
{
fprintf(f," R = %d , G = %d , B = %d \n",X,Y,TR,TG,TB);
}

R += TR;
G += TG;
B += TB;
}
}

IDX = (Y * Pic -> Width + X) * Pic -> BytesPerPixel;

R = (R / M.Divisor) + M.Offset;
G = (G / M.Divisor) + M.Offset;
B = (B / M.Divisor) + M.Offset;

*(Pic -> Data + IDX + Pic -> R_IDX) = Clamp(R, 0, 255);
*(Pic -> Data + IDX + Pic -> G_IDX) = Clamp(G, 0, 255);
*(Pic -> Data + IDX + Pic -> B_IDX) = Clamp(B, 0, 255);
}
}
fclose(f);
}
уже два дня маюсь,не могу понять в чем глюк!Помогите пождалуйста...
Заранее спасибо

Ответить

  Ответы Всего ответов: 11  

Номер ответа: 1
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #1
Добавлено: 20.03.11 12:56
  1. fprintf(f," R = %d , G = %d , B = %d \n",X,Y,TR,TG,TB);

R = X, G = Y, B = TR

Ответить

Номер ответа: 2
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #2
Добавлено: 20.03.11 12:58
и вообще %d - это ж вроде double, а тут одни int

Ответить

Номер ответа: 3
Автор ответа:
 Захарка



Вопросов: 0
Ответов: 42
 Профиль | | #3 Добавлено: 20.03.11 14:33
d - десятичное целое
i - десятичное целое со знаком
это если я в лекции ничего не напутал(

Ответить

Номер ответа: 4
Автор ответа:
 Лёха



Вопросов: 20
Ответов: 79
 Web-сайт: supersait16.ucoz.ru
 Профиль | | #4
Добавлено: 20.03.11 16:13
поменял на %i,а результат тот же самйы!Как он так криво умножает?

Ответить

Номер ответа: 5
Автор ответа:
 Лёха



Вопросов: 20
Ответов: 79
 Web-сайт: supersait16.ucoz.ru
 Профиль | | #5
Добавлено: 20.03.11 16:20
Winand,спасибо тебе огромное,а то я думаю,что хрень!

Ответить

Номер ответа: 6
Автор ответа:
 Лёха



Вопросов: 20
Ответов: 79
 Web-сайт: supersait16.ucoz.ru
 Профиль | | #6
Добавлено: 20.03.11 17:10
Счас я все исправил,теперь почти все работает,но для некоторых матриц это фильтр не работает,можете обьяснить почему?
  1.  
  2. void Process_Convolution3x3(IMG * Pic, Matrix_3x3 M)
  3. {
  4. int TR, TG, TB;
  5. int R, G, B;
  6.  
  7. UINT IDX;
  8.  
  9. for(int Y = 1;Y < Pic -> Height - 1;Y++)
  10. {
  11. for(int X = 1;X < Pic -> Width - 1;X++)
  12. {
  13. //Обрабатываем квадрат заданый матрицой
  14. for(int Row = -1;Row < 2;Row++)
  15. {
  16. for(int Item = -1;Item < 2;Item++)
  17. {
  18. IDX = ((Y + Row) * Pic -> Width + (X + Item)) * Pic -> BytesPerPixel;
  19.  
  20. TR = *(Pic -> Data + IDX + Pic -> R_IDX);
  21. TG = *(Pic -> Data + IDX + Pic -> G_IDX);
  22. TB = *(Pic -> Data + IDX + Pic -> B_IDX);
  23.  
  24. TR *= M.Mat[Row + 1][Item + 1];
  25. TG *= M.Mat[Row + 1][Item + 1];
  26. TB *= M.Mat[Row + 1][Item + 1];
  27.  
  28. R += TR;
  29. G += TG;
  30. B += TB;
  31. }
  32. }
  33.  
  34. IDX = (Y * Pic -> Width + X) * Pic -> BytesPerPixel;
  35.  
  36. R = (R / M.Divisor) + M.Offset;
  37. G = (G / M.Divisor) + M.Offset;
  38. B = (B / M.Divisor) + M.Offset;
  39.  
  40. *(Pic -> Data + IDX + Pic -> R_IDX) = Clamp(R, 0, 255);
  41. *(Pic -> Data + IDX + Pic -> G_IDX) = Clamp(G, 0, 255);
  42. *(Pic -> Data + IDX + Pic -> B_IDX) = Clamp(B, 0, 255);
  43.  
  44. R = 0;
  45. G = 0;
  46. B = 0;
  47. }
  48. }
  49. }
  50. не работает для Emboss,Sharpen

Ответить

Номер ответа: 7
Автор ответа:
 Лёха



Вопросов: 20
Ответов: 79
 Web-сайт: supersait16.ucoz.ru
 Профиль | | #7
Добавлено: 25.03.11 21:07
Что никто не знает?

Ответить

Номер ответа: 8
Автор ответа:
 VbStarter



ICQ: 357911808 

Вопросов: 118
Ответов: 1340
 Web-сайт: moscowdevils.ru
 Профиль | | #8
Добавлено: 25.03.11 21:35
вероятно

Ответить

Номер ответа: 9
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #9 Добавлено: 25.03.11 22:41
я думаю, скорее, всем просто лень запускать твой код и ковыряться там

Ответить

Номер ответа: 10
Автор ответа:
 VbStarter



ICQ: 357911808 

Вопросов: 118
Ответов: 1340
 Web-сайт: moscowdevils.ru
 Профиль | | #10
Добавлено: 26.03.11 14:15
точно

Ответить

Номер ответа: 11
Автор ответа:
 bobbina



Вопросов: 0
Ответов: 1
 Web-сайт: http://dpivi.ru
 Профиль | | #11
Добавлено: 29.03.11 19:02
Я вообще не вдуплю о чем речь.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам