ilyasuhih » 14 дек 2012, 19:46
это неплохая мысль...но чет все равно не представляю как это осуществить. мне например нужно окрасить обычную картинку в эффект серого цвета.такая тернарная операция есть.код ее есть.на СИ. вот гляньте
//Создание изображения в оттенках серого(DIB-секции)
//по одному каналуRGBвDIB
HBITMAPChannelSplittconstBITMAPINFO*pBMI.constvoid
COLORREFMask.HDChMemDC)
pBits.
typedefstruct{BITMAPINFOHEADERbmiHeader;
RGBQUADbmiColor[256]:
}BMI8BPP;
intwidth=pBMI->bmiHeader.biWidth;
intheight-pBMI->bmiHeader.biHeight:
BMI8BPPbmi8bpp;
memsetUbmiSbpp,0 ,sizeof(bmi8bpp)):
bmi8bpp.bmiHeader.biSize
bmiSbpp.bmiHeader.biWidth
bmi8bpp.bmiHeader.biHeight
bmi8bpp.bmiHeader.biPlanes
bmi8bpp.bmiHeader.biBitCount
=Sizeof(BITMAPINFOHEADER);
-width:
-height:
-1:
-8;
bmiSbpp.bmiHeader.biCompression-BI_RGB:
fo r(inti-0 ;i<256 :1++ )//Цветовая таблица одного из каналовRGB
}
bmi8bpp.bmiColor.rgbRed= i&GetRValue(Mask):
bmi8bpp.bmiColor.rgbGreen=i&GetGValue(Mask):
bmi8bpp.bmiCo1or.rgbBlue- i&GetBValue(Mask);
HBITMAPhRslt=CreateDIBSection(NULL,(BITMAPINFO*)&bmiSbpp.
NULL.DIB_RGB_COLORS.NULL.NULL):
if(hRs1t==NULL)
returnNULL;
SelectObjectthMemDC.hRslt);
HBRUSHhBrush=CreateSolidBrush(Mask);//Однородный красный.
//зеленый или синий цвет
HGDIOBJhOld-SelectObjectdiMemDC.hBrush);
StretchDIBits(hMemDC.0.0.width,height.0.0.width,height.
pBits,pBMI,DIB_RGB_COLORS.MERGECOPY);
fo r(i-0 :i<256 ;i++)//Перейти к настоящей цветовой таблице
//оттенковсерогоцвета
bmiSbpp.bmiColor.rgbRed
bmiSbpp.bmiColor.rgbGreen
bmi8bpp.bmiColor.rgbBlue
;
SetDIBColorTable(hMemDC.0.256 .bmiSbpp.bmiColor);
SelectObject(hMemDC.hOld):
DeleteObject(hBrush);
returnhRslt;
}
это неплохая мысль...но чет все равно не представляю как это осуществить. мне например нужно окрасить обычную картинку в эффект серого цвета.такая тернарная операция есть.код ее есть.на СИ. вот гляньте
//Создание изображения в оттенках серого(DIB-секции)
//по одному каналуRGBвDIB
HBITMAPChannelSplittconstBITMAPINFO*pBMI.constvoid
COLORREFMask.HDChMemDC)
pBits.
typedefstruct{BITMAPINFOHEADERbmiHeader;
RGBQUADbmiColor[256]:
}BMI8BPP;
intwidth=pBMI->bmiHeader.biWidth;
intheight-pBMI->bmiHeader.biHeight:
BMI8BPPbmi8bpp;
memsetUbmiSbpp,0 ,sizeof(bmi8bpp)):
bmi8bpp.bmiHeader.biSize
bmiSbpp.bmiHeader.biWidth
bmi8bpp.bmiHeader.biHeight
bmi8bpp.bmiHeader.biPlanes
bmi8bpp.bmiHeader.biBitCount
=Sizeof(BITMAPINFOHEADER);
-width:
-height:
-1:
-8;
bmiSbpp.bmiHeader.biCompression-BI_RGB:
fo r(inti-0 ;i<256 :1++ )//Цветовая таблица одного из каналовRGB
}
bmi8bpp.bmiColor[i].rgbRed= i&GetRValue(Mask):
bmi8bpp.bmiColor[i].rgbGreen=i&GetGValue(Mask):
bmi8bpp.bmiCo1or[i].rgbBlue- i&GetBValue(Mask);
HBITMAPhRslt=CreateDIBSection(NULL,(BITMAPINFO*)&bmiSbpp.
NULL.DIB_RGB_COLORS.NULL.NULL):
if(hRs1t==NULL)
returnNULL;
SelectObjectthMemDC.hRslt);
HBRUSHhBrush=CreateSolidBrush(Mask);//Однородный красный.
//зеленый или синий цвет
HGDIOBJhOld-SelectObjectdiMemDC.hBrush);
StretchDIBits(hMemDC.0.0.width,height.0.0.width,height.
pBits,pBMI,DIB_RGB_COLORS.MERGECOPY);
fo r(i-0 :i<256 ;i++)//Перейти к настоящей цветовой таблице
//оттенковсерогоцвета
bmiSbpp.bmiColor[i].rgbRed
bmiSbpp.bmiColor[i].rgbGreen
bmi8bpp.bmiColor[i].rgbBlue
;
SetDIBColorTable(hMemDC.0.256 .bmiSbpp.bmiColor);
SelectObject(hMemDC.hOld):
DeleteObject(hBrush);
returnhRslt;
}