У меня есть изображение в формате gif размером 80x40 пикселей. Цветовая палитра этого изображения состоит из нескольких похожих цветов, которые имеют разные цифры в палитре. Как я могу построить массив 2d, где ячейка в x,y
будет цветом в палитре?Delphi. Преобразование растрового изображения в 2D-массив
ответ
TGifImage имеет такой массив, построенный в, так что просто воспользоваться этим:
var
Gif:TGifImage;
PaletteIndex : byte;
begin
Gif := TGifImage.Create;
// ... load your stuff here ...
// TGifImage has an Images property, which is probably only interesting if you're dealing with animations, so just take the first image.
PaletteIndex := Gif.Images[0].Pixels[0,0]; // palette index for top-left pixel
// Now, to get the actual TColor for that pixel, you could do this:
Self.color := Gif.Images[0].ColorMap.Colors[PaletteIndex];
end;
Кстати, это может быть хорошим местом, чтобы выразить свою признательность Андерсу Меландеру за пожертвование vcl.Imaging.GIFImg.pas –
Да! Оно работает!!! Спасибо! – Yazon2006
Вы можете загрузить свое изображение в TBitmap
. Затем вы можете использовать свойство ScanLine
класса TBitmap
. Это индексированное свойство принимает индекс на основе 0 строки и возвращает указатель на значения пикселей для этой строки. Взгляните на this page, чтобы узнать больше о ScanLine
.
Это не то, что означает плакат вопроса. Он хочет знать индекс в цветовой палитре, а не индекс в строке сканирования. –
К сожалению, сканирование не работает должным образом, но спасибо за ответ! – Yazon2006
Прямой доступ к X-му элементу Y-й 'Scanline' даст вам нужный индекс таблицы цветов. – OnTheFly
Может кто-нибудь объяснить, почему этот вопрос приостановлен как не по теме? –
На самом деле это хороший вопрос, который мог бы дать четкий ответ, если бы он не был заблокирован людьми, которые, вероятно, даже не понимают вопрос. 3 из доводчиков никогда не отправляли никаких вопросов или ответов с помощью тега Delphi. –