Форум: "Начинающим";
Текущий архив: 2008.08.17;
Скачать: [xml.tar.bz2];
ВнизКак инвертировать цвета TBitmap? Найти похожие ветки
← →
savyhinst © (2008-07-16 09:57) [0]Здраствуйте.
Подскажите пожалуйста, как нивертировать цвета TBitmap;
Как я делал:
class procedure TSteelfGlyphs.InvertBitmap(const bmp:TBitmap);
var
x,y,w,h:integer;
begin
w:=bmp.Width-1;
h:=bmp.Height-1;
for x:=0 to w do
begin
for y:=0 to h do
with bmp.Canvas do
begin
pixels[x,y]:=not pixels[x,y];
end;
end;
end;
-так не работает.
Спасибо за внимание.
← →
clickmaker © (2008-07-16 10:07) [1]Bitmap.ScanLine
← →
Ega23 © (2008-07-16 10:08) [2]TColor + F1
← →
brother © (2008-07-16 10:09) [3]> not pixels[x,y];
не факт... от многих параметров зависит
← →
savyhinst © (2008-07-16 10:16) [4]ТАК: не работает
class procedure TSteelfGlyphs.InvertBitmap(const bmp:TBitmap);
var
pixs:PByteArray;
x,y,w,h:integer;
begin
w:=bmp.Width-1;
h:=bmp.Height-1;
for y:=0 to h do
begin
pixs:=bmp.ScanLine[y];
for x:=0 to w do
begin
pixs[x]:=not pixs[x];
end;
end;
end;
← →
Jeer © (2008-07-16 10:17) [5]invRed, myRed: byte;
invRed := 255 - myRed;
аналогично с G и B
← →
brother © (2008-07-16 10:20) [6]> ТАК: не работает
> class procedure TSteelfGlyphs.InvertBitmap(const bmp:TBitmap)
> ;
> var
> pixs:PByteArray;
> x,y,w,h:integer;
> begin
> w:=bmp.Width-1;
> h:=bmp.Height-1;
> for y:=0 to h do
> begin
> pixs:=bmp.ScanLine[y];
> for x:=0 to w do
> begin
> pixs[x]:=not pixs[x];
> end;
> end;
> end;
это зачем?
← →
clickmaker © (2008-07-16 10:20) [7]function InvertColor(AValue: TColor): TColor;
var r, g, b: byte;
begin
r := GetRValue(AValue);
g := GetRValue(AValue);
b := GetRValue(AValue);
Result := RGB(not r, not g, not b);
end;
?
← →
Jeer © (2008-07-16 10:20) [8]На всякий случай, вдруг поможет :)
← →
clickmaker © (2008-07-16 10:22) [9]хотя да. Лучше 255 -
← →
brother © (2008-07-16 10:24) [10]те так
function InvertColor(AValue: TColor): TColor;
var r, g, b: byte;
begin
r := GetRValue(AValue);
g := GetRValue(AValue);
b := GetRValue(AValue);
Result := RGB(255-r, 255-g, 255-b);
end;
?
зы под рукой делфи нет проверить...
← →
Jeer © (2008-07-16 10:25) [11]Вариант:
var
R: TRect;
...
with Image1.Picture.Bitmap do
begin
R := Rect(0, 0, Width, Height);
InvertRect(Canvas.Handle, R);
end;
Image1.Invalidate;
← →
savyhinst © (2008-07-16 10:25) [12]У меня тут появился такой вопрос: а если у меня картинка о двух цветах, чёрно-белая, и на каждую точку приходится по одному биту?
← →
Jeer © (2008-07-16 10:26) [13]Тебе уже советовали:
TColor + F1
← →
Johnmen © (2008-07-16 10:50) [14]
> на каждую точку приходится по одному биту?
Как ты это узнал?
← →
{RASkov} © (2008-07-16 10:56) [15]> Как инвертировать цвета TBitmap?
InvColor:=Color xor $FFFFFF;
← →
savyhinst © (2008-07-16 11:00) [16]ХмХм. Всем спасибо. InvertRect(Canvas.Handle, R); подошёл больше всего, т.к. делать ничего особенного не надо =]
> Johnmen © (16.07.08 10:50) [14]
Как я это узнал? догадался, так как при сохранении из MS Paint в формат Монохромный рисунок, bmp рисунок занимает подозрительно мало места. Меньше байт, чем получалось умножением его длины на ширину.
← →
Ega23 © (2008-07-16 11:06) [17]
> Как ты это узнал?
ЕМНИП, в описании формата что-то под палитру отводится. В соответствии с этим выделяется размер под пиксели. И если у тебя строго 2 цвета, то при палитре в TrueColor тебе на описание каждого пикселя нужно 4 байта (3 + альфа-канал), то в монохроме в те же 4 байта 32 пикселя влезут.
Ну это так, условно всё.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.08.17;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.041 c