Если этот старый хрен не поставит мне зачет, то я не знаю, чо я делать буду. Ну ничо, до его вылавливания чуть больше четырех с половиной часов ^_^ Кузин, держись!
copy to clipboardподсветка кода- unit Analyze_v3_code;
- {Программа предназначена для !приблизительной!
- оценки содержания цветов в изображении. Возможна не
- совсем корректная работа с очень светлыми или наоборот,
- очень темными оттенками цветов.
- Значения выводятся в процентном отношении к общей площади
- изображения, белый цвет не учитывается.
- Формат входных данных - jpeg/jpg.}
-
- interface
-
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, ExtDlgs, StdCtrls, ExtCtrls, JPEG, Math;
-
- type
- TForm1 = class(TForm)
- img1: TImage;
- btn1: TButton;
- dlgOpenPic1: TOpenPictureDialog;
- btn2: TButton;
- grp1: TGroupBox;
- lbl1: TLabel;
- lbl2: TLabel;
- lbl3: TLabel;
- lbl4: TLabel;
- lbl5: TLabel;
- lbl6: TLabel;
- lbl7: TLabel;
- lbl8: TLabel;
- lbl9: TLabel;
- size: TLabel;
- redc: TLabel;
- yellowc: TLabel;
- greenc: TLabel;
- bluec: TLabel;
- purplec: TLabel;
- orangec: TLabel;
- blackc: TLabel;
- grayc: TLabel;
- btn3: TButton;
- lbl10: TLabel;
- procedure btn1Click(Sender: TObject);
- procedure btn2Click(Sender: TObject);
- procedure FormClose(Sender: TObject; var Action: TCloseAction);
- procedure btn3Click(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
- TRGBColor = record //тип для хранения отдельных значений rgb-цвета
- R,
- G,
- B : Byte;
- end;
-
- {тип для хранения HSB( то же самое, что HSV)-цвета. Hue, Saturation, Brightness - оттенок, насыщенность, яркость}
- THSBColor = record
- Hue, //оттенок
- Sat, //насыщенность
- Br : Double; // яркость
- end;
-
- var
- Form1: TForm1;
- red,yellow,green,blue,purple,orange,black,gray,picsize{размер изображения}: Integer;
- picpr{сколько пикселей в одном проценте площади изображения}: Double;
-
-
- implementation
-
- uses analyze_code_f2;
-
- {$R *.dfm}
-
- {Функция для конвертации rgb-цвета в hsb. Входное значение - запись с отдельными
- значениями цветовых составляющих (RGB), выходное - эквивалент в HSV}
- function RGBToHSB(rgb : TRGBColor) : THSBColor;
- var
- minRGB, maxRGB, delta : Double;
- h , s , b : Double ;
- begin
- H := 0.0 ;
- minRGB := Min(Min(rgb.R, rgb.G), rgb.B) ;
- maxRGB := Max(Max(rgb.R, rgb.G), rgb.B) ;
- delta := ( maxRGB - minRGB ) ;
- b := maxRGB ;
- if (maxRGB <> 0.0) then s := 255.0 * Delta / maxRGB
- else s := 0.0;
- if (s <> 0.0) then
- begin
- if rgb.R = maxRGB then h := (rgb.G - rgb.B) / Delta
- else
- if rgb.G = maxRGB then h := 2.0 + (rgb.B - rgb.R) / Delta
- else
- if rgb.B = maxRGB then h := 4.0 + (rgb.R - rgb.G) / Delta
- end
- else h := -1.0;
- h := h * 60 ;
- if h < 0.0 then h := h + 360.0;
- with result do
- begin
- Hue := h;
- Sat := s * 100 / 255;
- Br := b * 100 / 255;
- end;
- end;
-
- {Преобразование загружаемого jpg-изображения в bmp для использования .Canvas.Pixels}
- procedure JPEGtoBMP(const FileName: TFileName);
- var
- jpeg: TJPEGImage;
- bmp: TBitmap;
- begin
- jpeg := TJPEGImage.Create;
- try
- jpeg.CompressionQuality := 100; {Default Value}
- jpeg.LoadFromFile(FileName);
- bmp := TBitmap.Create;
- try
- bmp.Assign(jpeg);
- Form1.img1.Picture.Bitmap.Assign(bmp);
- finally
- bmp.Free
- end;
- finally
- jpeg.Free
- end;
- end;
-
- procedure TForm1.btn1Click(Sender: TObject);
- begin
- if dlgopenpic1.Execute then
- begin
- JPEGtoBMP(dlgOpenPic1.FileName);
- end;
- end;
UPD: Во время написания этого поста ебучий интернет опять упал. Второй раз за час. Ну чозанахуй, а? =\ Месяцами же без глюков!