Преобразовать формат «Изображение» / «Изображение» в мой собственный - PullRequest
0 голосов
/ 04 февраля 2011

Учитывая изображение (формат является частью вопроса), я хочу иметь возможность преобразовать его в свой «формат».Мой формат, скажем, простой логический массив X by Y, покрывающий размер временного изображения, указывающего, включен ли этот конкретный пиксель.Цвет не имеет значения.Я понятия не имею о форматах изображений (таких как BMP, JPG, GIF), поэтому с учетом любого из них можно будет прочитать изображение, чтобы затем «отобразить» это состояние пикселя.

Я предполагаю, что сложность может заключаться в том, чтобы определить на изображении, включен ли определенный пиксель.Поскольку это является частью определенной части программы, которую я создаю, я могу гарантировать, что пользователи будут создавать свое изображение только в одном цвете и в определенном диапазоне.например, обычный красный, зеленый, желтый и т. д.

Я пытаюсь добиться того, чтобы пользователи использовали любую графическую программу, которую они хотят (например, mspaint), нарисовать свое изображение, затем сохранить его и импортировать в мое приложение.на более позднем этапе.

Позволяет ли мне какой-либо графический формат сделать это?Я надеюсь, что предоставил достаточно информации для того, что я после.Я приведу очень простой пример.

Например: созданное изображение имеет размер 20,10, и пользователь нарисовал прямую линию от точки 0,0 -> 6,0 (т. Е. Шириной 7 пикселей).Они сохранили это как BMP, JPG как угодно.Затем я хочу открыть это изображение и отсканировать его, чтобы определить, был ли нарисован определенный пиксель или нет.Таким образом, пиксели 0,0 1,0 2,0 3,0 4,0 5,0 6,0 будут включены, а все остальные будут отключены.Если мне придется заставить их сохранить его как определенный тип, я доволен этим.

Я использую Delphi в качестве языка разработки.

Спасибо

Джейсон

1 Ответ

3 голосов
/ 04 февраля 2011

Из коробки вы можете загрузить несколько различных форматов изображений с Delphi (BMP, JPG, PNG, GIF, я думаю, и в наши дни).Тогда есть множество сторонних опций, доступных для поддержки других типов изображений.

Как только вы загрузите изображение в память, проще всего будет преобразовать его в Tbitmap.Есть несколько способов сделать это тоже.Но так как вы хотите возиться с пикселями, тогда я бы создал Tbitmap и установил его формат пикселей на 24 бита, тогда я бы нарисовал ваше загруженное изображение на холсте Tbitmap.

bmp.Width:=sourecimage.Width;
bmp.Height:=sourceimage.Height;
bmp.PixelFormat:=pf24bit;
bmp.Canvas.Draw(0,0,sourceimage);

Хотя это может и не произойтибыть наиболее эффективным способом сделать это, он получает изображение в памяти известного формата, и вам нужно беспокоиться только об одном способе его использования, а не о кодировании для различных форматов.

Теперь у вас есть 2опции для доступа к информации об изображении: - Свойство Pixels (которое очень медленно, но легко понять) - Свойство Scanlines (которое быстро, но немного сложнее в использовании)

Оба позволят вам перебирать всепиксели на изображении и определяют их цвет.

Теперь, когда у вас есть пиксели, вам нужно разобраться, что определяет пиксель как «ВКЛ», а что определяет пиксель как «ВЫКЛ».Для этого, я думаю, вам нужно будет выбрать цвет для представления пикселя «OFF» (например, белый - $ FFFFFF), поэтому, если пиксель этого цвета, он выключен, в противном случае он включен.

Немного трудно идти дальше, не зная слишком много о том, чего вы действительно пытаетесь достичь.Вам нужна производительность или простота?Вы действительно нуждаетесь в собственной структуре или достаточно хороших только растровых данных (фактически двумерный массив).

И важное замечание.Использование файла JPG не годится.JPG использует приблизительные цвета, и я не знаю, каким образом вы можете гарантировать, какой цвет будет загружен после сжатия / распаковки изображения.Хотя ваши «выключенные» пиксели могут быть «почти белыми», нет гарантии, что они будут «точно белыми».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...