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

Вниз

Что с иконками?, я не понимаю...   Найти похожие ветки 

 
Borealis   (2003-08-18 20:21) [0]

Было у меня с десяток красивых иконок (файлов с расширением .ico). В одном из своих проектов, я "загнал" эти иконки в TImageList. Спустя некоторое время, файлы иконок затерялись где-то в джунглях винчестера, и я решил восстановить их из старого проекта. Делаю примерно так:

procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
ico: TIcon;
begin
ImageList1.DrawingStyle := dsNormal;
ico := TIcon.Create;
for i := 0 to ImageList1.Count - 1 do
begin
ImageList1.GetIcon(i, ico);
ico.SaveToFile("C:\Icons\" + IntToStr(i) + ".ico");
end;
ico.Free;
end;


Открываю каталог "C:\Icons"... Ой!.. Что это?.. Что это за жалкое зрелище? Впечатление, что иконки неделю колбасило в стиральной машине и они там бесжалостно полиняли... :(
(Я наверно что то не так сделал?)


 
Fenik   (2003-08-19 00:00) [1]

PixelFormat?


 
Borealis   (2003-08-19 00:27) [2]


> Fenik © (19.08.03 00:00) [1]
> PixelFormat?
??? Это в чём? В TIcon или в TImageList? Так ни в том ни в том нет такого свойства.

Я знаю свойство PixelFormat есть у TBitmap, но он к моей проблеме не относится...


 
Некрофил - затейник__   (2003-08-19 07:10) [3]

2 Borealis
Ты разрешение не менял ? like 32 -> 16


 
Borealis   (2003-08-21 22:56) [4]


> Некрофил - затейник__ © (19.08.03 07:10) [3]
> 2 Borealis
> Ты разрешение не менял ? like 32 -> 16
В смысле разрешение экрана? Нет, у меня всегда стоит True Color.

Странная тишина. Либо никто не знает ответа, либо у всех нормально работает, либо никто не сталкивался с этой проблемой.

Я подготовил небольшой тест. Пожалуйста, уделите ему немного своего внимания...

Положите на форму два TImage ( Image1 и Image2) и TButton ( Button1). В обработчик события OnClick у кнопки скопируйте следующий код:

procedure TForm1.Button1Click(Sender: TObject);
var
bmp: TBitmap;
ico: TIcon;
iml: TImageList;

// Здесь просто прорисовка картинки и не заслуживает вашего внимания.
// Смотрите начиная с begin метода OnClick
procedure DrawBitmap();
var
X, Y: Integer;
Xe, Ye, R: Extended;

function SmoothColor(E: Extended; Color0, Color1: TColor): TColor;
begin
Result := RGB(
Trunc(GetRValue(Color1) * E + GetRValue(Color0) * (1 - E)),
Trunc(GetGValue(Color1) * E + GetGValue(Color0) * (1 - E)),
Trunc(GetBValue(Color1) * E + GetBValue(Color0) * (1 - E)));
end;

begin
bmp := TBitmap.Create;
bmp.Width := 32;
bmp.Height := 32;
for X := 0 to 31 do
for Y := 0 to 31 do
begin
Xe := (2 * (X - 3) / 26 - 1);
Ye := (2 * (Y - 3) / 26 - 1);
R := Sqrt(Xe * Xe + Ye * Ye);
if R > 1 then
bmp.Canvas.Pixels[X, Y] := SmoothColor(1 / (R * R * R), clBlack, clMaroon)
else
bmp.Canvas.Pixels[X, Y] := SmoothColor(cos(R * pi / 2), clMaroon, clYellow);
end;
end;

begin
// Сначала нужно создать и разрисовать иконку.
// Так как у TIcon нет канвы, то рисовать приходится весьма загадочным способом:

// (1) Создаю TBitmap и рисую на нём:
DrawBitmap;

// (2) Создаю TImageList и добавляю в него bmp:
iml := TImageList.CreateSize(32, 32);
iml.AddMasked(bmp, clBlack);
bmp.Free;

// (3) Наконец создаю TIcon и загружаю в него первое изображение из TImageList
ico := TIcon.Create;
iml.DrawingStyle := dsNormal;
iml.GetIcon(0, ico);
iml.Free;

// Всё. Иконка создана. Теперь её можно отобразить:
Image1.Picture.Icon := ico;
ico.Free;

// Теперь сохраняю иконку в файл...
Image1.Picture.Icon.SaveToFile("c:\MyIcon.ico");

// ...и загружаю во второй TImage
Image2.Picture.Icon.LoadFromFile("c:\MyIcon.ico");

// Сравните эти два изображения. Посмотрите файл MyIcon.ico.
// Что я делаю не так? А если всё верно, то как обойти эту фичу?
end;


 
Sheng   (2003-08-21 23:45) [5]

Это скорее всего глюг толи TImageList, толи Винды. У меня такое было несколько раз. Я просто открываю ImageList, а там - грязь. Только удалить все иконки от туда и загрузить туда заново... :(



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

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

Наверх





Память: 0.46 MB
Время: 0.009 c
1-10826
JS
2003-08-21 17:06
2003.09.04
BoundsChecker


14-10900
Soft
2003-08-18 13:58
2003.09.04
Как просто заработать 3 биллиона.


1-10674
iNew
2003-08-21 05:35
2003.09.04
Вот сделал копирование файлов в отдельном потоке. Оцените.


1-10828
VIL
2003-08-25 12:24
2003.09.04
Caption активной страницы PageControl


14-10938
sniknik
2003-08-15 01:30
2003.09.04
Не читаются CDROM в Lunix





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский