Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.043 c
6-1191929280
fd979
2007-10-09 15:28
2008.08.17
Как послать сообщение в виде HMTL?


15-1214563536
oldman
2008-06-27 14:45
2008.08.17
Архиватор PAR


15-1214894072
Игорь М.
2008-07-01 10:34
2008.08.17
по клипперу вопрос (clipper5)


2-1215944581
Рома
2008-07-13 14:23
2008.08.17
передача данних


15-1214850954
blazerad
2008-06-30 22:35
2008.08.17
Индексация базы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский