Конвертация BMP в ICO

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

NET Coder
Новичок
Новичок
 
Сообщения: 25
Зарегистрирован: 06.02.2008 (Ср) 0:18

Конвертация BMP в ICO

Сообщение NET Coder » 06.02.2008 (Ср) 0:31

Здравствуйте!

Есть небольшой код, который по замыслу конвертирует BMP в ICO:

Код: Выделить всё
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        Dim Ico As Icon
        Dim bmp As Bitmap
        Me.OpenFileDialog1.ShowDialog()
        bmp = Bitmap.FromFile(Me.OpenFileDialog1.FileName)
        h = bmp.GetHicon
        Ico = Icon.FromHandle(h)
        Me.ImageList1.Images.Add(Ico)
        Me.ListView1.Items.Add("Ещё примерчик", Me.ListView1.Items.Count)
        Me.Icon = Ico
        bmp.Dispose()
        Ico.Dispose()
    End Sub


Мой коллега - программист утверждает, что таким образом преобразовать BMP в ICO ну никак нельзя. Кто из нас прав?

З.Ы. По моим данным преобразование проходит успешно - проверено на иконке формы.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 06.02.2008 (Ср) 7:55

Можно, особенно если h объявить как IntPtr
Весь мир матрица, а мы в нем потоки байтов!

NET Coder
Новичок
Новичок
 
Сообщения: 25
Зарегистрирован: 06.02.2008 (Ср) 0:18

Сообщение NET Coder » 06.02.2008 (Ср) 10:37

Ну так и есть. Просто раньше объявил переменную как IntPtr.
То есть вот так:
Код: Выделить всё
Dim h As IntPtr

И так далее.

А весь код выглядит так:

Код: Выделить всё
Imports System.Drawing
Public Class Form1
    Dim Ico As Icon
    Dim bmp As Bitmap
    Dim h As IntPtr
    Dim Rect As System.Drawing.Rectangle
    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
       
        Rect.Height = 16
        Rect.Width = 16
       
        Ico = Icon.ExtractAssociatedIcon("C:\Program Files\Opera\Opera.exe")
        Me.ImageList1.Images.Add(Ico)
        Me.ListView1.Items.Add("Примерчик", 0)
        Me.Button3.Image = Ico.ToBitmap
       
    End Sub

    Private Sub ToolStripStatusLabel1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles ToolStripStatusLabel1.Paint
        e.Graphics.DrawIcon(Ico, Rect)
        Me.ToolStripStatusLabel1.Text = "Какой - то текст..."
    End Sub
    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        Dim Ico As Icon
        Dim bmp As Bitmap
        Me.OpenFileDialog1.ShowDialog()
        bmp = Bitmap.FromFile(Me.OpenFileDialog1.FileName)
        h = bmp.GetHicon
        Ico = Icon.FromHandle(h)
        Me.ImageList1.Images.Add(Ico)
        Me.ListView1.Items.Add("Ещё примерчик", Me.ListView1.Items.Count)
        Me.Icon = Ico
        bmp.Dispose()
        Ico.Dispose()
    End Sub

   End Class


Код предназначен для исследования возможностей оформления Интерфейса Программ

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 06.02.2008 (Ср) 18:21

А как сделать без потери цвета?

NET Coder
Новичок
Новичок
 
Сообщения: 25
Зарегистрирован: 06.02.2008 (Ср) 0:18

Сообщение NET Coder » 06.02.2008 (Ср) 18:32

А что понимается под потерей цвета?

Кажется, понял о чём речь.

* Добавлено позже. Причина: уточнение Информации
Последний раз редактировалось NET Coder 06.02.2008 (Ср) 18:39, всего редактировалось 1 раз.

NET Coder
Новичок
Новичок
 
Сообщения: 25
Зарегистрирован: 06.02.2008 (Ср) 0:18

Сообщение NET Coder » 06.02.2008 (Ср) 18:36

Если это поможет, то тест проводился на BMP с TrueColor.
Если Вас не затруднит - не могли бы Вы передать мне Ваш образец?

NET Coder
Новичок
Новичок
 
Сообщения: 25
Зарегистрирован: 06.02.2008 (Ср) 0:18

Сообщение NET Coder » 06.02.2008 (Ср) 18:52

Хотя насколько мне известно, потери цвета при подобном преобразовании неизбежны, но я могу ошибаться.
Если я ошибаюсь - поправьте...


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 3

    TopList  
cron