powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Кто знает как повернуть ПРАВИЛЬНО содержимое TImage на 90 градусов?
3 сообщений из 3, страница 1 из 1
Кто знает как повернуть ПРАВИЛЬНО содержимое TImage на 90 градусов?
    #32148363
Alexander2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос такой

Кто знает как повернуть содержимое 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;
...
Рейтинг: 0 / 0
Кто знает как повернуть ПРАВИЛЬНО содержимое TImage на 90 градусов?
    #32148405
StarWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Напиши ручками поворот.... думаю не так сложно будет транспонировать матрицу (О какие умные слова знаю :) )
...
Рейтинг: 0 / 0
Кто знает как повернуть ПРАВИЛЬНО содержимое TImage на 90 градусов?
    #32148429
AlekZander
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
// тут если картинка была высокого качества, например 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 бит на пиксел)
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Кто знает как повернуть ПРАВИЛЬНО содержимое TImage на 90 градусов?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]