Hatalar, hatalar, sorular - sayfa 2063

 
Saydamlık kanallarına sahip iki bmp nesnesi vardır. Üst üste bindirildiğinde, bazı uint renkleri ortaya çıkıyor. Her nesnenin üst üste binen piksellerinin uint renklerini biliyorsanız, bu değerleri kendiniz nasıl hesaplayabilirsiniz?
 
fxsaber :
Saydamlık kanallarına sahip iki bmp nesnesi vardır. Üst üste bindirildiğinde, bazı uint renkleri ortaya çıkıyor. Her nesnenin üst üste binen piksellerinin uint renklerini biliyorsanız, bu değerleri kendiniz nasıl hesaplayabilirsiniz?

 static uchar       GetA( const uint fromcolor){ return ( uchar ((fromcolor)>> 24 ));}
   static uchar       GetR( const uint fromcolor){ return ( uchar ((fromcolor)>> 16 ));}
   static uchar       GetG( const uint fromcolor){ return ( uchar ((fromcolor)>> 8 ));}
   static uchar       GetB( const uint fromcolor){ return ( uchar (fromcolor));}
static uint        ARGBToColor( const uchar a, const uchar r, const uchar g, const uchar b){ return ((a<< 24 )|(r<< 16 )|(g<< 8 )|(b));}

static uint cColor::Mix( const uint bottom, const uint top)
  {
//===============
// if top color is not transparent => no mixing required
//===============
   if (cColor::GetA(top)== UCHAR_MAX ) return (top);
//===============

//===============
   static uint bottomprev= 0 ;
   static uint topprev= 0 ;
   static uint resultprev= 0 ;
//===============

//===============
   if (bottomprev==bottom && topprev==top) return (resultprev);
//===============

//===============
   bottomprev=bottom;
   topprev=top;
//===============

//===============
// Get Params of Colors
//===============
   double topA=( double )cColor::GetA(top);   double bottomA=( double )cColor::GetA(bottom);
   double topR=( double )cColor::GetR(top);   double bottomR=( double )cColor::GetR(bottom);
   double topG=( double )cColor::GetG(top);   double bottomG=( double )cColor::GetG(bottom);
   double topB=( double )cColor::GetB(top);   double bottomB=( double )cColor::GetB(bottom);
//===============

//===============
// Blend components
//===============
   uchar newA= uchar (topA+(bottomA*( 255.0 -topA)/ 255.0 ));
   uchar newR= uchar ((topR*topA/ 255.0 )+(bottomR*bottomA *( 255.0 -topA)/( 255.0 * 255.0 )));
   uchar newG= uchar ((topG*topA/ 255.0 )+(bottomG*bottomA *( 255.0 -topA)/( 255.0 * 255.0 )));
   uchar newB= uchar ((topB*topA/ 255.0 )+(bottomB*bottomA *( 255.0 -topA)/( 255.0 * 255.0 )));
//===============

//===============
   resultprev=cColor::ARGBToColor(newA,newR,newG,newB);
//===============

//===============
// New Color
//===============
   return (resultprev);
//===============
  }
 
Andrey Barinov :

Teşekkür ederim! Bir soru daha. Örneğin, beş nesne aynı anda üst üste bindirilirse, o zaman çiftler (üst/alt) aşağıdan yukarıya mı yoksa yukarıdan aşağıya mı yapılmalı?

 
fxsaber :

Teşekkür ederim!


Tüm (bmp) nesneleri aynı anda tek bir tuval üzerine çizmek daha iyidir, uzun vadede bu daha basit bir yaklaşımdır.

 
Andrey Barinov :

Tüm (bmp) nesneleri aynı anda tek bir tuval üzerine çizmek daha iyidir, uzun vadede bu daha basit bir yaklaşımdır.

Bu sebeple soruyorum. Sorunun üstünde tasarlanmış başka bir soru var.

 
fxsaber :

Teşekkür ederim! Bir soru daha. Örneğin, beş nesne aynı anda üst üste bindirilirse, o zaman çiftler (üst/alt) aşağıdan yukarıya mı yoksa yukarıdan aşağıya mı yapılmalı?


Katmanlar halinde, sıraya göre (tip zorder) aşağıdan yukarıya doğru çiziyorum, çünkü beş nesnenin hangi piksellerinin kesişeceği hemen bilinmediği anlaşılıyor. Sanki gerçek bir tuvalde.

Karıştırdıktan sonra böyle görünüyor


 
Andrey Barinov :

Katmanlar halinde, sıraya göre (tip zorder) aşağıdan yukarıya doğru çiziyorum, çünkü beş nesnenin hangi piksellerinin kesişeceği hemen bilinmediği anlaşılıyor. Sanki gerçek bir tuvalde.

Karıştırdıktan sonra böyle görünüyor

İyi! Değiştirilmiş bir CCanvas mı yoksa kendi çözümünüzü mü kullanıyorsunuz? Uzun vadede hangi yaklaşım daha karlı?

 
fxsaber :

İyi! Değiştirilmiş bir CCanvas mı yoksa kendi çözümünüzü mü kullanıyorsunuz? Uzun vadede hangi yaklaşım daha karlı?


Kendiminkini yazmak zorunda kaldım, ancak standart kütüphaneden önemli miktarda kod parçası ödünç alarak (ilkel çizim algoritmaları, düzgünleştirme vb.). Konseptinizi standart kitaplığın etrafına sarmaktansa, grafiklerle çalışma konseptinize kod parçalarını sıkıştırmanın daha kolay olduğu ortaya çıktı.

"Canlı" olsaydı standart kitaplığı kullanmakta bir sakınca görmezdim, ancak şu ana kadar GUI için hiçbir şekilde uyarlanmadı.

 
Andrey Barinov :

Kendiminkini yazmak zorunda kaldım, ancak standart kütüphaneden önemli miktarda kod parçası ödünç alarak (ilkel çizim algoritmaları, düzgünleştirme vb.). Konseptinizi standart kitaplığın etrafına sarmaktansa, grafiklerle çalışma konseptinize kod parçalarını sıkıştırmanın daha kolay olduğu ortaya çıktı.

"Canlı" olsaydı standart kitaplığı kullanmakta bir sakınca görmezdim, ancak şu ana kadar GUI için hiçbir şekilde uyarlanmadı.

Şimdi temizle, teşekkürler.

 
dil hatası
 #include <Expert\ExpertSignal.mqh>

void OnStart ()
{
  CIndicator* a = NULL ;   
  CExpertSignal b;
       
  b.InitIndicators(a); // 'InitIndicators' - no one of the overloads can be applied to the function call
}