![]()  | 
	
 
  | 
		
			
  | 	
	
	
		
		|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны | 
![]()  | 
	
	
| 
		 | 
	Опции темы | Поиск в этой теме | Опции просмотра | 
| 
	 | 
| 
		 
			 
			#1  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 В общем есть картинка bmp формата, нужно разбить эту картинку на RGB и загнать в массив (скорее всего 3 мерный где каждый элемент это r,g,b соответсвенно) для дальнейшей работы с изображением через массив. 
		
	
		
		
		
		
		
	
		
		
	
	
	Дело в том что как работать с черно-белым понимаю, а как цветное на RGB разбить немного не понимаю, подскажите  | 
| 
		 
			 
			#2  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 к сожалению не могу представить бмп в виде 3-х мерного массива. а вот pixels[x,y] вполне даже 
		
	
		
		
		
		
		
	
		
		
	
	
	 | 
| 
		 
			 
			#3  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 мне нужен именно rgb для дальнейшей работы 
		
	
		
		
		
		
		
	
		
		
	
	
	 | 
| 
		 
			 
			#4  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 структура BMP http://ru.wikipedia.org/wiki/BMP  
		
	
		
		
		
		
		
	
		
		
	
	
	bfOffBits - смещение до массива с изображением. Размер массива:= рbfSize - bfOffBits Если картинка 32 битная, то каждая ячейка массива картинки будет равна BGRZ (Z используется редко) каждое значение размером в 1 байт (итого 4).  | 
| 
		 
			 
			#5  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Берем пример использования ScanLine и внимательно изучаем. 
		
	
		
		
		
		
		
	
		
		
	
	
	 | 
| 
		 
			 
			#6  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Код: 
	CONST PixelCountMax = 32768; TYPE pRGBArray = ^TRGBArray; TRGBArray = ARRAY[0..PixelCountMax-1] OF TRGBTriple; ... var Form1: TForm1; OriginalBitmap:TBitmap; ProcessedBitmap:TBitmap; i,j:integer; RowOriginal:pRGBArray; RowProcessed:pRGBArray; Код: 
	procedure CreateBMP;
begin
if OriginalBitmap.PixelFormat <> pf24bit then
  begin
    ShowMessage('Изображение должно быть 24-х битным');
    Exit;
  end;
for j:=OriginalBitmap.Height-1 downto 0 do
begin
  RowOriginal:=pRGBArray(OriginalBitmap.Scanline[j]);
  RowProcessed:=pRGBArray(ProcessedBitmap.Scanline[j]);
  for i:=OriginalBitmap.Width-1 downto 0 do
  begin
    RowProcessed[i].rgbtRed:=RowOriginal[i].rgbtRed;
    RowProcessed[i].rgbtGreen:=RowOriginal[i].rgbtGreen;
    RowProcessed[i].rgbtBlue:=RowOriginal[i].rgbtBlue;
  end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
  OriginalBitmap.LoadFromFile('a.bmp');
  createbmp;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
   OriginalBitmap:=TBitmap.Create;
end;изображение a.bmp 800x600, программа выдает ошибку, подскажите Последний раз редактировалось fen1ks, 14.09.2010 в 22:22.  |