Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Кто знает как повернуть ПРАВИЛЬНО содержимое TImage на 90 градусов?
|
|||
|---|---|---|---|
|
#18+
Вопрос такой Кто знает как повернуть содержимое TImage на 90 градусов? вот тут кусок кода с глюком: ============================= procedure TfrmImageEditor.actImageTCWExecute(Sender: TObject); var OriginBitMap : TBitMap; RotateBitMap : TBitMap; OP : PByteArray; RP : PByteArray; x,y : Integer; TempBMP : TBitmap; begin OriginBitMap := TBitMap.create; RotateBitMap := TBitMap.create; TempBMP := TBitMap.Create; try RotateBitMap.Height := imSource.Picture.Bitmap.Width; RotateBitMap.Width := imSource.Picture.Bitmap.Height; OriginBitMap.Assign(imSource.Picture.Graphic); OriginBitMap.PixelFormat := pf8bit; RotateBitMap.PixelFormat := pf8bit; // если вращать так, то теряется качество картинки // тут если картинка была высокого качества, например 24 битная, то при // повороте теряется качество цветопередачи, // но если прописать = pf24bit - то поворачивает неправильно, режет пополам // короче, мне кажется, надо что-то тут сделать на предмет обнаружения // качества картинки, а потом выбор pf8bit или pf24bit или pf32bit // но хрен знает что делать при вращении, если картинка 24 битная, 32битная // она не вращает как положено, там навыерное пробемы с битовой матрицей // для разных форматов, но ГДЕ? // пробовал делать Case перед циклом вращения, но она не выдает содержимое myformat в отладчике он получается = pfDevice // { myformat:=OriginBitMap.PixelFormat; // // case myformat of // pf8bit : newformat:= pf8bit; // pf24bit: newformat:= pf24bit; // end; // } // но даже если выяснить какой формат, то как потом правильно // вращать? RotateBitMap.Palette := OriginBitMap.Palette; for y := 0 to RotateBitMap.Height -1 do begin RP := RotateBitMap.ScanLine[y]; for x := RotateBitMap.Width -1 downto 0 do begin OP := OriginBitMap.ScanLine[x]; RP[RotateBitMap.Width -1-x] := OP[y]; end end; imSource.Width :=RotateBitMap.Height; imSource.Height:=RotateBitMap.Width; imSource.Picture.Assign(RotateBitMap); ImageRefresh; finally RotateBitMap.Free; OriginBitMap.Free; end; end; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2003, 20:49 |
|
||
|
Кто знает как повернуть ПРАВИЛЬНО содержимое TImage на 90 градусов?
|
|||
|---|---|---|---|
|
#18+
Напиши ручками поворот.... думаю не так сложно будет транспонировать матрицу (О какие умные слова знаю :) ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2003, 04:03 |
|
||
|
Кто знает как повернуть ПРАВИЛЬНО содержимое TImage на 90 градусов?
|
|||
|---|---|---|---|
|
#18+
// тут если картинка была высокого качества, например 24 битная, то при // повороте теряется качество цветопередачи, // но если прописать = pf24bit - то поворачивает неправильно, режет пополам // короче, мне кажется, надо что-то тут сделать на предмет обнаружения // качества картинки, а потом выбор pf8bit или pf24bit или pf32bit // но хрен знает что делать при вращении, если картинка 24 битная, 32битная // она не вращает как положено, там навыерное пробемы с битовой матрицей // для разных форматов, но ГДЕ? В зависимости от битности у тебя пикселу отдается 1 байт, 2 байта, 3 байта или 4 байта. переведи все в 32битовый формат. тогда пиксел у тебя будет интегер, и качество не потеряется. Для простоты понимания напиши пару getPixel(x:integer;sl:PByteArray) и putPixel(x:integer;sl:PByteArray;c:integer) в общем, тут сложность мне кажется в организации памяти, а она проста как 3 копейки. Можно извратится и использовать DIrectX :-) вообще я писал игрушку под директдрав, там у меня самолетики вращались под любым углом, ничего особо сложного небыло, но все работало в одном цветовом режиме(16 бит на пиксел) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2003, 07:48 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=32148429&tid=2118463]: |
0ms |
get settings: |
9ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
55ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
| others: | 247ms |
| total: | 400ms |

| 0 / 0 |
