Редакция *.jpg файла
Пршу помочь с возникшей проблимкой:
как програмно (VB6) добавить текст на JPEG картинку? :confused:
Заранее благодарю.
Пршу помочь с возникшей проблимкой:
как програмно (VB6) добавить текст на JPEG картинку? :confused:
Заранее благодарю.
'API's used in this sample
Private Declare Function CreateFont Lib "gdi32" Alias "CreateFontA" (ByVal H As Long, ByVal W As Long, ByVal E As Long, ByVal O As Long, ByVal W As Long, ByVal I As Long, ByVal U As Long, ByVal S As Long, ByVal C As Long, ByVal OP As Long, ByVal CP As Long, ByVal Q As Long, ByVal PAF As Long, ByVal F As String) As Long
Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private Declare Function GetTickCount Lib "kernel32" () As Long
'Constant text to draw
Const TEXTOUTPUT As String = "www.codenet.ru"
Const PI As Single = 3.141593
'API constants
Const ANSI_CHARSET As Long = 0
Const FF_DONTCARE As Long = 0
Const CLIP_LH_ANGLES As Long = &H10
Const CLIP_DEFAULT_PRECIS As Long = 0
Const OUT_TT_ONLY_PRECIS As Long = 7
Const PROOF_QUALITY As Long = 2
Const TRUETYPE_FONTTYPE As Long = &H4
Const p_WIDTH As Long = 12
Const p_HEIGHT As Long = 12
'Center coordinates
Dim pXCenter As Long
Dim pYCenter As Long
'LookUp table with relative coordinates
Dim LookUp(1 To 2, 1 To 36) As Long
Dim pRadius As Long
'ending flag
Dim TimeToEnd As Boolean
'Main animation procedure
Private Sub RunMain()
Const FrameInterval As Long = 35
Dim LastFrameTime As Long
Dim Angle As Long
'Show the form
Me.Show
Angle = 1800
Do
'check to see if we have to end
If TimeToEnd Then Exit Do
If GetTickCount() - LastFrameTime > FrameInterval Then 'Time to update
'update angle
Angle = (Angle Mod 3600) - 100
'clear the form
Me.Cls
DrawRotatedText Angle
LastFrameTime = GetTickCount()
End If
DoEvents
Loop
End Sub
'Draws the rotated text
Private Sub DrawRotatedText(Angle As Long)
Dim NewFont As Long
Dim OldFont As Long
Static I As Long
'creat the font
NewFont = CreateFont(p_HEIGHT, p_WIDTH, Angle, 0, FF_DONTCARE, 0, 0, 0, ANSI_CHARSET, OUT_TT_ONLY_PRECIS, CLIP_LH_ANGLES Or CLIP_DEFAULT_PRECIS, PROOF_QUALITY, TRUETYPE_FONTTYPE, "Arial")
'set the new font
OldFont = SelectObject(Me.hdc, NewFont)
I = (I Mod 36) + 1
CurrentX = pXCenter + LookUp(1, I)
CurrentY = pYCenter + LookUp(2, I)
Print TEXTOUTPUT
'set the old font back
NewFont = SelectObject(Me.hdc, OldFont)
'Clean up
DeleteObject NewFont
End Sub
Private Sub Form_Load()
pRadius = ((Len(TEXTOUTPUT) * p_WIDTH) / 2)
BuildLookupTable
RunMain
End Sub
Private Sub Form_Resize()
'calculate center
pXCenter = Me.ScaleWidth / 2
pYCenter = Me.ScaleHeight / 2
End Sub
Private Sub Form_Unload(Cancel As Integer)
'flag the end
TimeToEnd = True
End Sub
'Builds the lookup table with the circle coordinates
Private Sub BuildLookupTable()
Dim I As Long
Dim Angle As Long
Const XIndex As Long = 1
Const YIndex As Long = 2
For I = LBound(LookUp, 2) To UBound(LookUp, 2)
LookUp(XIndex, I) = CLng(Cos((Angle * PI / 180)) * pRadius)
LookUp(YIndex, I) = CLng(Sin((Angle * PI / 180)) * pRadius)
Angle = (Angle Mod 360) + 10
Next I
End Sub
Стандартный ЕХЕ, форма autoredraw=true, можете влепить как подложку на форму picture=ваш_рисунок для наглядного примера. На самом деле есть множество примеров, демонстрирующих сабж, это один из них.
Мне надо на файле *.jpg добавить текст и сохранить его на прежнем месте но уже с текстом.
Мне надо на файле *.jpg добавить текст и сохранить его на прежнем месте но уже с текстом.
Так картинка на форме или фиг знает где, сама по себе как файл?
Вот пример чтение - вставка текста - запись.
Sub Macro1()
' чтение файла 1.jpg
Dim impflt As ImportFilter
Dim impopt As StructImportOptions
Set impopt = New StructImportOptions
impopt.Mode = cdrImportFull
Set impflt = ActiveLayer.ImportEx("C:\1.jpg", cdrJPEG, impopt)
impflt.Finish
' вставить текст
Dim s As Shape
Set s = ActiveLayer.CreateParagraphText(0, 3, 4, 4, _
"ПРОВЕРЕНО", , , "Times New Roman", 24, cdrTrue, _
cdrTrue, , cdrCenterAlignment)
' запись файла 2.jpg
Dim expflt As ExportFilter
Set expflt = ActiveDocument.ExportBitmap("C:\2.jpg", _
cdrJPEG, cdrAllPages, cdrRGBColorImage, 2550, 3510, 300, 300, _
cdrNoAntiAliasing, False, False, True, False, cdrCompressionNone)
expflt.Finish
End Sub
Заранее благодарю.
По моему все решается просто:
pictureBox.CurrentX=100
pictureBox.CurrentY=100' Указываешь нужные координаты
pictureBox.Print "Мой текст"
SaveToJpg1 pictureBox.hDC, filename, pictureBox.Height, pictureBox.Width
где SaveToJpg1 - функция из библиотеки savtojpg.dll, на которую надо сослаться в соответствующем модуле
Private Declare Sub SaveToJpg1 Lib "savtojpg.dll" (ByVal hgd As Long, ByVal filename As String, ByVal Height As Long, ByVal Width As Long)
Вот тут вылетает с ошибкой
во вложенном архиве проект полностью и скриншот
1. Законное место для DLL - system32.
2. Для picturebox должно быть autoredraw=TRUE, scalemode=3
и все работает.
Но коряво. Обязательно надо обрабатывать нажатие Cancel и присвоить нужные свойства CommonDialog.
А точнее, надо анализировать возвращаемое значение Filename, потому что можно нажать не только Cancel, но и крестик, закрывающий CommonDialog.
1. Законное место для DLL - system32.
Опять стандарты?:) ИМХО, не обязательно. Лучшее место - в папке с программой. и не надо при копировании с одного места на второе искать эту ДЛЛ-ку, а также не засоряешь свой SYSTEM32
SaveToJpg2 ?
у меня после выполнения этой функции от фотки остается только белый фон.
а при использовании SaveToJpg1 при минимизированном окне сохраняется черт те знает что. Как быть в этом случае???
Заранее благодарю!
SaveToJpg2 ?
у меня после выполнения этой функции от фотки остается только белый фон.
а при использовании SaveToJpg1 при минимизированном окне сохраняется черт те знает что. Как быть в этом случае???
Заранее благодарю!
У меня все работает:cool:
как это понять?
работает функция SaveToJpg2?
или с минимизированным окном (содержащим Picture1) все нормально сохраняется, точнее то что и предпологалось?
если да то убедительно прошу примерчик :confused:
заранее благодарю!
P.S. мне надо чтоб, из моей программы делалась надпись на фотографии, но чтоб эта фотография нигде не светилась...
SaveToJpg2 ?
у меня после выполнения этой функции от фотки остается только белый фон.
а при использовании SaveToJpg1 при минимизированном окне сохраняется черт те знает что. Как быть в этом случае???
Заранее благодарю!
SaveToJpg2 не пашет - подтверждаю, а в каментах рассказано о SaveToJpg1. Я эту ДЛЛ не писал, потому и не расскажу о ней ничего интересного.:p
По поводу минимизированного окна: проверь еще раз autoredraw=TRUE.
Где хранить DLL - на любителя. Либо ты засоряешь system32 (но в этом случае - годится для всех приложений), либо засоряешь папку с приложением и тогда делаешь это для каждого приложения, где используется DLL.
ОГРОМНОЕ ТЕБЕ СПОСИБО!!!
SkyM@n:ай-яй-яй!DLL не писал,а другим людям суёшь?А откуда им знать,что там?Может,просто эмуляция,а внутри живёт страшное-престрашное страшилище!?
SkyM@n:ай-яй-яй!DLL не писал,а другим людям суёшь?А откуда им знать,что там?Может,просто эмуляция,а внутри живёт страшное-престрашное страшилище!?
Я НЕ занимаюсь писательством под бейсик. Тем более на халяву. Для халявы есть отдельный раздел. Во-вторых, чем мог (и хотел), тем помог. В-третьих, как ты сказал ИМ выбирать, юзать это или нет.
А главное:
Столько написали,а результат?
Уважаемый @pixo $oft.
SavePicture не умеет сохранять графику в формате JPG !!!
Чего языком то молоть. Если тебе известен ActiveX DLL/OCX, напиши, дай ссылку. Потому и юзают savtojpg, что аналогичный ActiveX DLL/OCX публике неизвестен.
А какой результат ты ожидал?
У меня была проблема и мне помогли и я благодарен а что тебе еще надо? :confused: