Ticket #6511: mythui.intensity.patch
File mythui.intensity.patch, 6.4 KB (added by , 15 years ago) |
---|
-
mythtv/libs/libmythui/mythimage.cpp
6 6 #include <QMatrix> 7 7 8 8 #include "mythimage.h" 9 #include "mythverbose.h" 9 10 #include "mythmainwindow.h" 10 11 #include "mythuihelper.h" 11 12 #include "remotefile.h" … … 28 29 m_gradDirection = FillTopToBottom; 29 30 30 31 m_isReflected = false; 32 m_setIntensity = false; 31 33 32 34 m_imageId = 0; 33 35 … … 221 223 } 222 224 } 223 225 226 void MythImage::Intensity(float percent) 227 { 228 if (m_setIntensity) 229 return; 230 231 VERBOSE(VB_GENERAL, QString("MythImage::Float Passed was %1").arg(QString::number(percent))); 232 233 int segColors = depth() > 8 ? 256 : numColors(); 234 int pixels = depth() > 8 ? width()*height() : 235 numColors(); 236 unsigned int *data = depth() > 8 ? (unsigned int *)bits() : 237 (unsigned int *)colorTable().data(); 238 239 bool brighten = (percent >= 0); 240 if(percent < 0) 241 percent = -percent; 242 243 unsigned char *segTbl = new unsigned char[segColors]; 244 int tmp; 245 if(brighten) 246 { 247 for(int i=0; i < segColors; ++i) 248 { 249 tmp = (int)(i*percent); 250 if(tmp > 255) 251 tmp = 255; 252 segTbl[i] = tmp; 253 } 254 } 255 else 256 { 257 for(int i=0; i < segColors; ++i) 258 { 259 tmp = (int)(i*percent); 260 if(tmp < 0) 261 tmp = 0; 262 segTbl[i] = tmp; 263 } 264 } 265 266 if(brighten) 267 { 268 for(int i=0; i < pixels; ++i) 269 { 270 int r = qRed(data[i]); 271 int g = qGreen(data[i]); 272 int b = qBlue(data[i]); 273 int a = qAlpha(data[i]); 274 r = r + segTbl[r] > 255 ? 255 : r + segTbl[r]; 275 g = g + segTbl[g] > 255 ? 255 : g + segTbl[g]; 276 b = b + segTbl[b] > 255 ? 255 : b + segTbl[b]; 277 data[i] = qRgba(r, g, b, a); 278 } 279 } 280 else 281 { 282 for(int i=0; i < pixels; ++i) 283 { 284 int r = qRed(data[i]); 285 int g = qGreen(data[i]); 286 int b = qBlue(data[i]); 287 int a = qAlpha(data[i]); 288 r = r - segTbl[r] < 0 ? 0 : r - segTbl[r]; 289 g = g - segTbl[g] < 0 ? 0 : g - segTbl[g]; 290 b = b - segTbl[b] < 0 ? 0 : b - segTbl[b]; 291 data[i] = qRgba(r, g, b, a); 292 } 293 } 294 delete [] segTbl; 295 296 m_setIntensity = true; 297 } 298 299 224 300 MythImage *MythImage::FromQImage(QImage **img) 225 301 { 226 302 if (!img || !*img) -
mythtv/libs/libmythui/mythimage.h
28 28 29 29 bool IsGradient() const { return m_isGradient; } 30 30 bool IsReflected() const { return m_isReflected; } 31 bool HasIntensity() const { return m_setIntensity; } 31 32 32 33 void Assign(const QImage &img); 33 34 void Assign(const QPixmap &pix); … … 41 42 void Reflect(ReflectAxis axis, int shear, int scale, int length, 42 43 int spacing = 0); 43 44 void ToGreyscale(); 45 void Intensity(float percent); 44 46 45 47 /** 46 48 * @brief Create a gradient image. … … 60 62 QString GetFileName(void) const { return m_FileName; } 61 63 62 64 void setIsReflected(bool reflected) { m_isReflected = reflected; } 65 void setHasIntensity(bool intensity) { m_setIntensity = intensity; } 63 66 64 67 void SetIsInCache(bool bCached); 65 68 … … 83 86 FillDirection m_gradDirection; 84 87 85 88 bool m_isReflected; 89 bool m_setIntensity; 86 90 87 91 unsigned int m_imageId; 88 92 -
mythtv/libs/libmythui/mythuiimage.cpp
113 113 114 114 m_isGreyscale = false; 115 115 116 m_hasIntensity = false; 117 m_intensity = 0; 118 116 119 m_preserveAspect = false; 117 120 } 118 121 … … 187 190 if (m_isGreyscale && !img->isGrayscale()) 188 191 img->ToGreyscale(); 189 192 193 if (m_hasIntensity && !img->HasIntensity()) 194 img->Intensity(m_intensity); 195 190 196 if (m_ForceSize.isNull()) 191 197 SetSize(img->size()); 192 198 … … 234 240 if (m_isGreyscale && !im->isGrayscale()) 235 241 im->ToGreyscale(); 236 242 243 if (m_hasIntensity && !im->HasIntensity()) 244 im->Intensity(m_intensity); 245 237 246 m_Images.push_back(im); 238 247 239 248 aSize = aSize.expandedTo(im->size()); … … 326 335 if (m_isGreyscale) 327 336 s_Attrib += "greyscale"; 328 337 338 if (m_hasIntensity) 339 s_Attrib += "intensity"; 340 329 341 imagelabel = QString("%1-%2-%3x%4.png") 330 342 .arg(filename) 331 343 .arg(s_Attrib) … … 414 426 VERBOSE(VB_FILE, QString("MythUIImage::Load found in cache :%1:").arg(imagelabel)); 415 427 if (m_isReflected) 416 428 image->setIsReflected(true); 429 if (m_hasIntensity) 430 image->setHasIntensity(true); 417 431 418 432 bFoundInCache = true; 419 433 } … … 467 481 if (m_isGreyscale) 468 482 image->ToGreyscale(); 469 483 484 if (m_hasIntensity) 485 image->Intensity(m_intensity); 486 470 487 // Save scaled copy to cache 471 488 if (bNeedLoad) 472 489 GetMythUI()->CacheImage(imagelabel, image); … … 675 692 { 676 693 m_isGreyscale = parseBool(element); 677 694 } 695 else if (element.tagName() == "intensity") 696 { 697 m_hasIntensity = true; 698 m_intensity = (getFirstText(element).toFloat() / 100); 699 } 678 700 else 679 701 return MythUIType::ParseElement(element); 680 702 … … 733 755 734 756 m_isGreyscale = im->m_isGreyscale; 735 757 758 m_hasIntensity = im->m_hasIntensity; 759 m_intensity = im->m_intensity; 760 736 761 //SetImages(im->m_Images); 737 762 738 763 MythUIType::CopyFrom(base); -
mythtv/libs/libmythui/mythuiimage.h
99 99 bool m_preserveAspect; 100 100 101 101 bool m_isGreyscale; 102 bool m_hasIntensity; 102 103 104 float m_intensity; 105 103 106 friend class MythThemeBase; 104 107 friend class MythUIButtonListItem; 105 108 friend class MythUIProgressBar;