Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.01.14;
Скачать: [xml.tar.bz2];

Вниз

Поворачивание Tbitmap - как?   Найти похожие ветки 

 
vbazik   (2001-12-25 13:24) [7]

Не мучайся, (хоть это иной раз и полезно ;) )
Это то что обещал найти. Компактнее и существенно быстрее работает.
В отличии от других встреченных мною примеров этого геморроя
работает с gray-8bit, color-8bit,24bit :))
-------------------
procedure povorot90(Im1:TBitmap;var Im2:TBitmap);
function Pixel_Size(Im : TBitmap ): byte ;// Возвращает размер пиксела
//картинки в байтах
var
pix_size : byte ;
begin
case Im.PixelFormat of
pf24bit: pix_size := 3 ;
pf8bit : pix_size := 1 ;
pf16bit : pix_size := 2 ;
pf32bit : pix_size := 4 ;
else pix_size:= 0 ;
end;
Pixel_Size := pix_size ;
end;

var // povorot90
x,y,h,w,tmp,i,i3:integer;
R,G,B,Intens,size_ : byte ;// size_ - размер пиксела в байтах
pntr : PBytearray ; // указатель на адреса памяти в кот. находится Im1
pntr2: PBytearray ; // указатель на адреса памяти в кот. Im2
line_size : integer ;// длина строки изображения в байтах
index :integer ;// определяет смещение от начала строкии в байтах
bmp1 , bmp2 : ^TBitmap ;
begin
h := Im1.Height-1 ;
w := Im1.Width-1 ;
Im2.Height := w + 1 ;
Im2.Width := h + 1;
size_ := Pixel_Size( Im1 ) ;
if not(size_ in [1..4])then
begin MessageBox(0,"Im1:Unsupported type of bitmap","Error",0);exit; end;

Im2.PixelFormat := Im1.PixelFormat ;
Im2.Palette := Im1.Palette ;

i3 := 0 ;
line_size := (h+1) * size_ ;
if (line_size mod 4 <> 0)
then line_size := line_size + 4 - line_size mod 4 ;
for y := 0 to h do
begin
pntr := Im1.ScanLine[y];// получение указателя на начало Y строки
pntr2:= Im2.ScanLine[0];// получение указателя на начало 0 строки
i:= 0 ;
for x:= 0 to w do
begin
tmp := w-x ;
R := pntr[i] ;G := 0 ; B := 0 ; Intens := 0 ;
if size_ > 1 then G := pntr[i + 1] ;
if size_ > 2 then B := pntr[i + 2] ;
if size_ > 3 then Intens := pntr[i + 3] ;
index := -line_size * tmp ;
try
pntr2 [i3 + index ] := R ;
if size_ > 1 then pntr2 [i3 + index + 1] := G ;
if size_ > 2 then pntr2 [i3 + index + 2] := B ;
if size_ > 3 then pntr2 [i3 + index + 3] := Intens ;
except
end;
i := i + size_ ;
end;
i3 := i3 + size_ ;
end;
Im2.ReleasePalette ;
end;

-------------------------------------
p.s. А что творишь то , собрат по интересу?




Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.01.14;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.007 c
3-42372
TSV
2001-12-12 12:39
2002.01.14
Скроллинг мыши в DBGrid - продолжение


1-42456
777
2001-12-25 04:10
2002.01.14
Ширина колонок TDBGrid


1-42519
Andrey196
2001-12-26 16:15
2002.01.14
Как из события одново компонента вызвать событие другово компонета


1-42499
tovSuhov
2001-12-24 08:37
2002.01.14
Выравнивание текста в ячейках StringGrid`a...


1-42414
Phisio
2001-12-26 15:46
2002.01.14
Как нарисовать прозрачный прямоугольник





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский