Napisałem sobie funkcję do zamiany kolorów na klasie TBitmap:
Kod który to realizuje:
- Kod: Zaznacz cały
bmpOrginal->LoadFromFile(NazwaPliku);
TRGBTriple *ptr = 0;
for(int i=0;i < bmpOrginal->Height;i++) {
ptr = reinterpret_cast<TRGBTriple *>(bmpOrginal->ScanLine[i]);
for(int j=0; j < bmpOrginal->Width; j++) {
if(ptr[j].rgbtRed == 0xFF && ptr[j].rgbtGreen == 0xFF && ptr[j].rgbtBlue == 0xFF) {
ptr[j].rgbtBlue = 0xC0;
ptr[j].rgbtGreen = 0xC0;
ptr[j].rgbtRed = 0xC0;
} else {
ptr[j].rgbtBlue = 0x00;
ptr[j].rgbtGreen = 0x00;
ptr[j].rgbtRed = 0x00;
}
}
}
Teraz chce zrobić coś podobnego na klasie Gdiplus::bitmap, posiada ona metody GetPixel() i SetPixel() i robiąc to w ten sposób:
- Kod: Zaznacz cały
for(int i=0;i<bitmapa->GetWidth(); ++i) {
for(int j=0;j<bitmapa->GetHeight(); ++j) {
// tutaj pobranie koloru za pomocą GetPixel i zamiana go za pomocą SetPixel;
}
}
Chodzi to piekielnie wolno bo robi to po pixelu. Czy da się to zrobić za pomocą GDI szybciej ??