Exemple #1
0
void IconDes::RightDown(Point p, dword flags)
{
	p = GetPos(p);
	if(!InImage(p))
		return;
	if(tool == &IconDes::HotSpotTool) {
		if(p != Current().image.Get2ndSpot()) {
			ImageBuffer ib(Current().image);
			ib.Set2ndSpot(p);
			Current().image = ib;
			Refresh();
		}
		return;
	}
	RGBA ic = CurrentImage()[p.y][p.x];
	RGBA c = CurrentColor();
	if(flags & K_ALT) {
		c.a = ic.a;
		ic = c;
	}
	if(flags & K_CTRL)
		ic.a = c.a;
	rgbactrl.Set(ic);
	ColorChanged();
}
Exemple #2
0
void CImageEx::SetRectValue(CImage *pImg,int x,int y,int Dx,int Dy,BYTE *buf )
{
	IMAGEPARAMENT  P;  
	BYTE    *lp;  
	int     i,dw,dh,x1,y1,alpha,delta,Dxb,dwb;  

	GetImageParament(pImg,&P);  
	if (P.nBitCount<8) return;  
	x1=x;  
	y1=y;  
	alpha=delta=0;  
	
	if (x<0) 
	{   
		alpha=-x;    x1=0;  
	}  

	if (y<0) 
	{   
		delta=-y;    y1=0;  
	}  

	if (!InImage(pImg,x1,y1)) return;  
	dw=min(Dx,(int) P.nWidth-x1);      
	dh=min(Dy,(int) P.nHeight-y1);  
	dw -= alpha;  
	dh -= delta;  

	Dxb = Dx*P.nBytesPerPixel;  
	dwb = dw*P.nBytesPerPixel;  
	lp = (BYTE*) pImg->GetPixelAddress(x1,y1);  
	buf += (delta*Dx+alpha)*P.nBytesPerPixel;  
	
	for (i=0;i<dh;i++) 
	{  
		memcpy(lp,buf,dwb);    
		buf += Dxb;   
		lp -= P.nBytesPerLine;  
	}
}
Exemple #3
0
void IconDes::Set(Point p, RGBA rgba, dword flags)
{
	if(!IsCurrent())
		return;
	if(InImage(p)) {
		ImageBuffer ib(CurrentImage());
		RGBA& t = ib[p.y][p.x];
		if(t != rgba && (doselection || Current().selection[p.y][p.x].r)) {
			if(flags & K_ALT)
				t.a = rgba.a;
			else
			if(flags & K_CTRL) {
				rgba.a = t.a;
				t = rgba;
			}
			else
				t = rgba;
			RefreshPixel(p);
		}
		CurrentImage() = ib;
	}
}
void IMGPRED_Decompress( uint8_t *out, uint8_t *img, int w, int h ) {
	uint8_t zero[] = {0,0,0,0};
	uint8_t *o = out;
	for (int y=0; y<h; y++) {
		for (int x=0; x<w; x++) {
			
			uint8_t *NW = InImage(x-1,y-1) ? &out[((y-1)*w+(x-1))*4] : zero;
			uint8_t *W = InImage(x-1,y) ? &out[((y)*w+(x-1))*4] : zero;
			uint8_t *N = InImage(x,y-1) ? &out[((y-1)*w+(x))*4] : zero;

			uint8_t *C = InImage(x-1,y-1) ? &img[((y-1)*w+(x-1))*4] : zero;
			uint8_t *A = InImage(x-1,y) ? &img[((y)*w+(x-1))*4] : zero;
			uint8_t *B = InImage(x,y-1) ? &img[((y-1)*w+(x))*4] : zero;
			uint8_t *V = &img[((y)*w+(x))*4];

			for (int c=0; c<4; c++) {
				int32_t grad = (int32_t)N[c] + (int32_t)W[c] - (int32_t)NW[c];
				int32_t avg  = ((int32_t)N[c] + (int32_t)W[c]) / 2;
				int32_t pred = (avg + grad) >> 1;

				if ( C[c] > Max(A[c], B[c]) ) {
					pred = Min(A[c],B[c]);
				} else
				if ( C[c] < Min(A[c], B[c]) ) {
					pred = Max(A[c],B[c]);
				} else {
					pred = (int32_t)A[c] + (int32_t)B[c] - (int32_t)C[c];
				}

				int32_t diff = (int32_t)V[c];// - pred;

				if ( diff & 1 ) {
					diff &= (~1);
					diff = -diff;
				}

				*o++ = pred + diff;
			}
		}
	}
}