Давно ничего не писал не потому, что натерпелся в предыдущих постах большим количеством помидоров и яиц, а потому, что мне реально нечего записать для всеобщего ознакомления. Но недавно, когда я помогал другу с проектом, я наткнулся на простой процесс обработки изображений в Delphi, поэтому я продолжал искать информацию в Интернете и просматривать предыдущие сообщения о csdn. Из результатов поиска я обнаружил, что у многих людей. сталкивался ли я с подобными проблемами обработки изображений в различных проектах, но большинство ответов кажутся неполными (потому что многие из них не были опубликованы, или это может быть вопрос личных привычек. Ха-ха, я надеюсь, что после прочтения этой статьи) по моему, каждый может начать работать над этим дома. Скорость закрытия поста). Поэтому я описал проблемы и решения, с которыми столкнулся, ниже для вашей справки. В то же время вы можете продолжать делать кирпичи.
Мне нужно записать проблему, которую я хочу решить, до формального содержания, а также дать читателям хорошую позицию, чтобы их не раздражало мое плохое решение проблемы. Основная проблема, которую здесь необходимо решить, — повернуть изображение, отсканированное сканером, на 90 градусов в Delphi, чтобы получить подходящее для использования изображение, а поскольку размер изображения невозможно правильно уловить, изображение необходимо просто масштабировать. И мое решение полностью основано на этом требовании, поскольку я не особо задумываюсь об эффективности и четкости после обработки изображений, а благо в том, что программа выглядит очень просто.
Во-первых, у меня нет сканера, поэтому я не знаю, в каком формате картинка, полученная с помощью сканера (уже имеется), а в справке Delphi написано: «Растровое изображение — это мощный графический объект, используемый для создания , манипулировать (масштабировать, прокручивать, вращать и рисовать) и хранить изображения в памяти и в виде файлов на диске», поэтому мой первый шаг — преобразовать мои фрагменты в TBitmap для обработки. При преобразовании формата я изменил фактический размер изображения, чтобы он соответствовал потребностям последующего выбора части изображения. Функция следующая:
ПРОЦЕДУРА TMainForm.ChangeImageFormate;
вар Bitmap: TBitmap;
Масштаб: целое число;
начинать
Растровое изображение := TBitmap.Create;//1
пытаться
с ImageCert начните
Bitmap.Assign(Picture.Graphic);//2
Изображение := ноль;//3
Масштаб := Max(Bitmap.Width div Width,Bitmap.Height div Height)+1;//4
Ширина := Bitmap.Width div Zoom;//5
Высота := Bitmap.Height div Zoom;//6
Canvas.StretchDraw(Rect(0,0,Width,Height),Bitmap);//7
конец;
окончательно
Растровое изображение.Бесплатно;
конец;
конец;
Я думаю, что этот код не очень сложен. ImageCert — это элемент управления TImage, размещенный в форме. Единственное, что может быть незнакомым, — это восьмое предложение, но вы можете получить множество пояснений в помощи Delphi. Я не буду переводить его здесь. (Мой совет — прочитать дополнительную помощь). В то же время следует отметить, что третье предложение очень важно. Если вы удалите это предложение и формат вашего изображения не bmp, появится ошибка «Можно изменить только растровое изображение».
Второй шаг — реализовать поворот изображения, поскольку программа каждый раз требует поворота только на 90 градусов, поэтому здесь с этим проще справиться. Метод обработки заключается в замене по пикселям. Процесс реализации следующий:
процедура TMainForm.RotateImage;
вар x,y: целое число;
Тмпбитмап: ТБитмап;
начинать
TmpBitMap := TBitmap.Create;
пытаться
TmpBitMap.Assign(ImageCert.Picture.Graphic);
с ImageCert начните
Picture.Bitmap.Height := TmpBitMap.Width;
Picture.Bitmap.Width := TmpBitMap.Height;
для x:=0 до высоты do
для y:=0 до ширины do
Canvas.Pixels[TmpBitMap.Height-x,y] := TmpBitMap.Canvas.Pixels[y,x];
Высота: = TmpBitMap.Width;
Ширина: = TmpBitMap.Height;
конец;
окончательно
TmpBitMap.Free;
конец;
конец;
В этой программе особо говорить не о чем, но несколько настроек высоты и ширины меня очень раздражают, я всегда чувствую, что нужно сделать что-то еще, но убрать какие-либо строки я не могу. Если кому интересно, можете. попробуй. Будет лучше, если ты расскажешь мне о результатах. И в данном случае, поскольку у TImage и TBitmap есть свой холст, возможно, стоит изучить какой из них использовать, но из-за ограниченности времени я не пробовал.
Что касается части процесса создания изображения, я использовал TShape, затем установил стиль кисти bsclear и расположил положение TShape в onMouseMove ImageCert. Это не очень чувствительно, потому что, когда мышь находится на TShape, этого не произойдет. иметь какой-либо эффект, но, к счастью, влияние будет небольшим. Заодно вынес несколько картинок под TShape в событии OnMouseDown TShape. На этот раз, если ваше изображение не было масштабировано, вы обнаружите, что удаленное изображение не соответствует положению, которое мы видим (конечно, когда TImage неправильно отображает размер изображения).