GDI+ как вставить картинку в картинку

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 21.01.2005 (Пт) 14:50

Если пользоваться моей обёрткой, то так:
Код: Выделить всё
Dim i As Image
Set i = CreateBitmap(120, 90, PixelFormat24bppRGB)
With CreateGraphicsFromImage(i)
    .Clear ARGB(&HC0C0C0)
    .DrawImage CreateImage("test.jpg"), 0, 9, 120, 72
End With


В i получаешь результат.
Изображение

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 21.01.2005 (Пт) 15:35

Изображение

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 21.01.2005 (Пт) 16:42

В смысле, в байтах или в пикселах?
Если в пикселах - то CreateImage("test.jpg").Width и CreateImage("test.jpg").Height
Если в байтах - то FileLen("test.jpg")
Изображение

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 21.01.2005 (Пт) 16:56

Ну можешь загрузить заголовок JPG и вычислить размер из него (ширина и высота изображения прописана в заголовке). Только не стоит оно того, на мой взгляд.
Lasciate ogni speranza, voi ch'entrate.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 21.01.2005 (Пт) 16:56

Да, через GDI+ - нельзя.

2alibek: согласен. Зачем размер картинки, если всё равно не собираешься с ней работать?
Последний раз редактировалось tyomitch 21.01.2005 (Пт) 16:58, всего редактировалось 1 раз.
Изображение

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 21.01.2005 (Пт) 16:57

tyomitch, а не прикрутить ли тебе к обертке референсный модуль? Чтобы можно было узнать размеры, цветность и т.п. из заголовков?
Lasciate ogni speranza, voi ch'entrate.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 21.01.2005 (Пт) 16:59

alibek писал(а):tyomitch, а не прикрутить ли тебе к обертке референсный модуль? Чтобы можно было узнать размеры, цветность и т.п. из заголовков?
Ммм... А надо?
В принципе, мне не тяжело ;-)
Изображение

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 21.01.2005 (Пт) 17:01

"Общественность желает" :)
Lasciate ogni speranza, voi ch'entrate.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 21.01.2005 (Пт) 17:07

Блин, так imgBUF же уже есть, зачем еще раз подгружать???
Lasciate ogni speranza, voi ch'entrate.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 21.01.2005 (Пт) 17:08

Roman Koff писал(а):Вот что у меня вышло для создания превьюшки. Но в этом случае картинка подгружается дважды. Как оптимизировать?

Код: Выделить всё
Const resX As Long = 120
Const resY As Long = 90

Dim imgBUF As prjGDIplus.Image
Dim srcX As Long
Dim srcY As Long
Dim newX As Long
Dim newY As Long
Dim dXY As Single

Sub Make_Thumb(pDir As String, pFileSource As String)
    Set imgBUF = CreateBitmapFromPicture(LoadPicture(pDir & pFileSource))
    srcX = imgBUF.Width
    srcY = imgBUF.Height
    If srcX > srcY Then
        dXY = srcX / srcY
        newX = resX
        newY = resX / dXY
    Else
        dXY = srcY / srcX
        newY = resY
        newX = resY / dXY
    End If
    Set imgBUF = CreateBitmap(resX, resY, PixelFormat24bppRGB)
    With CreateGraphicsFromImage(imgBUF)
        .Clear ARGB(&HC0C0C0)
        .DrawImage CreateImage(pDir & pFileSource), Int((resX - newX) / 2), Int((resY - newY) / 2), newX, newY
    End With
    imgBUF.SaveToJpeg pDir & "_" & pFileSource, 80
    Set imgBUF = Nothing
End Sub


Код: Выделить всё
Const resX As Long = 120
Const resY As Long = 90

Dim imgBUF As prjGDIplus.Image, imgORG As prjGDIplus.Image
Dim srcX As Long
Dim srcY As Long
Dim newX As Long
Dim newY As Long
Dim dXY As Single

Sub Make_Thumb(pDir As String, pFileSource As String)
    Set imgORG = CreateImage(pDir & pFileSource)
    srcX = imgORG.Width
    srcY = imgORG.Height
    If srcX > srcY Then
        dXY = srcX / srcY
        newX = resX
        newY = resX / dXY
    Else
        dXY = srcY / srcX
        newY = resY
        newX = resY / dXY
    End If
    Set imgBUF = CreateBitmap(resX, resY, PixelFormat24bppRGB)
    With CreateGraphicsFromImage(imgBUF)
        .Clear ARGB(&HC0C0C0)
        .DrawImage imgORG, Int((resX - newX) / 2), Int((resY - newY) / 2), newX, newY
    End With
    imgBUF.SaveToJpeg pDir & "_" & pFileSource, 80
End Sub

Теперь грузится один раз - проверь.
Изображение

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 21.01.2005 (Пт) 17:10

Во-первых, StdPicture (LoadPicture()) уже содержит свойства .Width, .Height. Во-вторых, я не понимаю причин, по которым нельзя использовать один инстанс prjGDIPlus.Image.
Lasciate ogni speranza, voi ch'entrate.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 21.01.2005 (Пт) 17:16

alibek писал(а):Во-первых, StdPicture (LoadPicture()) уже содержит свойства .Width, .Height.

Тогда бы всё равно была загрузка дважды :-P
Изображение


Вернуться в Visual Basic 1–6

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 89

    TopList